proxy_pass 本身不直接导致路径遍历或源码泄漏,但配置不当会放大风险——关键在于 location 匹配宽松 + proxy_pass 未剥离前缀 + 后端服务对非法路径处理不严。真正引发内网源码泄漏的,往往是 nginx 把带恶意路径(如 /api/../../etc/passwd)原样转发给了后端 web 容器(如 tomcat、spring boot),而后端又开启了静态资源自动映射或目录遍历功能。严格限制 location 匹配范围避免使用宽泛前缀(如 /api)匹配所有以 api 开头的路径,否则 /api../config/application.yml 可能被误匹配并转发。 用 ^~ 前缀强制前缀匹配,禁用正则回溯干扰: location ^~/api/ { ... } 显式禁止点号和双点路径:在 location 内加 if ($request_uri ~ "\.\./") { return 403; } 若只允许小写字母、数字、斜杠、下划线,可用正则兜底:location ~ ^/api/[a-z0-9/_]+$ { ... }proxy_pass 必须带结尾斜杠以剥离前缀不带斜杠的 proxy_pass http://192.168.88.102:8080; 会把原始

proxy_pass 本身不直接导致路径遍历或源码泄漏,但配置不当会放大风险——关键在于 location 匹配宽松 + proxy_pass 未剥离前缀 + 后端服务对非法路径处理不严。真正引发内网源码泄漏的,往往是 Nginx 把带恶意路径(如 /api/../../etc/passwd)原样转发给了后端 Web 容器(如 Tomcat、Spring Boot),而后端又开启了静态资源自动映射或目录遍历功能。
严格限制 location 匹配范围
避免使用宽泛前缀(如 /api)匹配所有以 api 开头的路径,否则 /api../config/application.yml 可能被误匹配并转发。
- 用 ^~ 前缀强制前缀匹配,禁用正则回溯干扰:
location ^~/api/ { ... } - 显式禁止点号和双点路径:在 location 内加
if ($request_uri ~ "../") { return 403; } - 若只允许小写字母、数字、斜杠、下划线,可用正则兜底:
location ~ ^/api/[a-z0-9/_]+$ { ... }
proxy_pass 必须带结尾斜杠以剥离前缀
不带斜杠的 proxy_pass http://192.168.88.102:8080; 会把原始 URI(含恶意路径)完整透传;带斜杠才触发“前缀替换”逻辑,有效切断攻击链。
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 正确写法(剥离 /api/):
location ^~/api/ { proxy_pass http://192.168.88.102:8080/; } - 错误写法(透传 /api/../../etc/passwd):
proxy_pass http://192.168.88.102:8080; - 若后端需统一加 context-path(如 /zzyl-admin),应显式写出:
proxy_pass http://192.168.88.102:8080/zzyl-admin/;,结尾斜杠不可省
后端服务同步加固(Nginx 无法替代)
Nginx 是第一道过滤,但不能代替后端自身的安全边界。必须确保后端不响应危险路径:
- Spring Boot:关闭
spring.resources.static-locations的默认映射,或禁用WebMvcAutoConfiguration - Tomcat:检查
web.xml中是否禁用DefaultServlet的目录列表功能(listings=false) - 所有 Java 应用:设置 JVM 参数
-Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE=true阻止路径规范化绕过
补充防护层:重写与拒绝规则
在 proxy_pass 前插入防御性 rewrite 或 deny 指令,作为冗余保护:
- 统一拒绝含
..、.yml、.properties、.git的请求:if ($request_uri ~ "(?:..|.yml|.properties|.git)") { return 403; } - 用 rewrite 清洗路径(慎用):
rewrite ^/api/(.*)$ /$1 break;,再接 proxy_pass,确保只转发干净路径 - 启用 Nginx 的
underscores_in_headers on;并配合proxy_set_header X-Secure-Forwarded "true";,供后端做二次校验










