nginx反向代理需通过add_header配合always参数注入csp等安全头,用proxy_hide_header屏蔽后端冲突头,map实现策略分级,sub_filter仅兜底清洗html内联脚本。

直接用 proxy_pass 无法注入内容安全策略(CSP)、X-Frame-Options、Strict-Transport-Security 等响应头——它只负责转发,不参与响应体或关键响应头的生成。要为传统反向代理“注入合规描述”,核心不是靠过滤模块本身,而是利用 Nginx 原生支持的响应头控制能力,配合少量重写逻辑实现轻量、可靠、符合监管要求的安全加固。
用 add_header 统一注入标准安全头
这是最常用、最稳定的方式。Nginx 在 location 或 server 块中使用 add_header,可强制为所有经该块返回的响应添加合规头。注意:它只作用于 2xx 和 3xx 响应;若需覆盖后端已设的同名头,需开启 always 参数。
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https:;" always;add_header X-Content-Type-Options "nosniff" always;add_header X-Frame-Options "DENY" always;add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
用 proxy_hide_header + proxy_set_header 控制后端干扰
有些老旧后端会返回冲突或弱策略的响应头(如空 CSP、过期的 HSTS),直接 add_header 无法覆盖。此时需先隐藏后端头,再由 Nginx 主动注入:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
-
proxy_hide_header X-Frame-Options;—— 屏蔽后端发来的 X-Frame-Options -
proxy_hide_header Content-Security-Policy;—— 避免与 Nginx 自设 CSP 冲突 - 再搭配
add_header ... always,确保最终响应只含你定义的权威策略
用 map + add_header 实现动态策略分级
对不同路径或域名实施差异化安全策略(例如管理后台启用更严 CSP,静态资源放宽),可用 map 指令预判条件,生成变量后再注入:
- 在
http块定义:map $request_uri $csp_policy {<br> ~^/admin/ "default-src 'self'; script-src 'self' 'unsafe-eval';";<br> default "default-src 'self'; img-src 'self' data:;";<br>} - 在对应
location中:add_header Content-Security-Policy $csp_policy always;
用 sub_filter 替换 HTML 中的不安全内联脚本(慎用)
当后端无法修改源码,但必须移除 <script>alert(1)</script> 类高危内联代码时,可用 sub_filter 做响应体级清洗。但它仅适用于 text/html 响应,且需开启 sub_filter_once off 处理多处匹配:
sub_filter '<script>' '<script nonce="abc123">';</script>sub_filter_types text/html;sub_filter_once off;- ⚠️ 注意:不可用于压缩响应(需禁用 gzip)、不兼容流式传输、性能开销略高,仅作兜底手段










