nginx反向代理需加固代理链路:①后端白名单限制仅允代理ip访问;②规范设置host、x-real-ip等可信请求头并清除危险头;③拦截高危uri路径;④推荐启用https代理并校验证书。

Nginx 作为反向代理时,与后端服务的通信安全不能只靠“转发”本身来保证。即使外网请求被拦截或加密了,如果 Nginx 到后端(比如 192.168.1.251)这段链路是明文 HTTP、无校验、无访问控制,就存在中间人篡改、内网扫描暴露、伪造请求等风险。真正安全的代理,必须把“代理链路”当作可信边界来加固。
限制后端服务器仅响应来自代理的请求
内网 Web 服务器不应对外暴露服务入口,更不能接受任意来源的连接。最直接有效的方式是在其 Nginx 配置中做白名单访问控制:
- 使用
allow+deny all严格限定仅允许前端代理 IP(如192.168.1.200)访问 - 示例配置:
location / { allow 192.168.1.200; deny all; root /home/www/qmxyweb; index index.html; } - 配合防火墙(如 iptables 或 ufw)进一步封禁 80/443 端口对外网的监听,双重保险。
确保代理头传递真实且可控
Nginx 转发时若不规范设置请求头,后端可能误判来源、绕过鉴权,甚至被注入恶意头:
- 必须显式设置
proxy_set_header Host $host,避免后端因 Host 缺失返回默认站点或错误路由 -
proxy_set_header X-Real-IP $remote_addr和proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for只在可信链路下启用,且后端需校验X-Forwarded-For是否被客户端伪造(建议只信任一级代理头) - 清除潜在危险头:
proxy_hide_header Server; proxy_hide_header X-Powered-By; proxy_hide_header X-AspNet-Version;
禁用未授权路径与敏感接口暴露
攻击者可能绕过域名直连代理 IP,尝试访问 /admin、/.git、/phpmyadmin 等路径:
- 在 proxy server 块中用
if指令拦截高危 URI:if ($request_uri ~* "/admin|/config|/sql|/\.git|/backup\.(zip|tar|sql)") { return 403; } - 更推荐方式是配合
location精确匹配,例如:location ~ ^/(admin|config|sql|phpmyadmin)/ { return 403; }
启用代理链路层加密(可选但推荐)
若后端支持 HTTPS,建议 Nginx 以 https:// 协议 proxy_pass:
- 后端启用自签名或内网 CA 签发证书,Nginx 配置
proxy_ssl_verify on;+proxy_ssl_trusted_certificate校验证书链 - 避免使用
proxy_ssl_verify off,否则失去 TLS 加密意义 - 若暂无法配 HTTPS,至少确保后端服务绑定到内网专用 IP(如
listen 192.168.1.251:80),而非0.0.0.0:80
不复杂但容易忽略











