全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-20 7 分钟 ✍️ juanwangdev

反向代理与负载均衡安全

反向代理是 NGINX 的核心功能之一。作为前端与后端服务器之间的中间层,必须做好安全加固,防止信息泄露和攻击传递。

隐藏后端服务器信息

清除后端响应头

后端服务器可能返回暴露自身信息的响应头,需主动清除:

nginx
location /api/ {
    proxy_pass http://backend_pool;
    
    # 清除后端暴露的信息
    proxy_hide_header X-Powered-By;
    proxy_hide_header Server;
    proxy_hide_header X-AspNet-Version;
    
    # 设置统一的响应头
    proxy_set_header X-Frame-Options "SAMEORIGIN";
}

proxy_hide_header 阻止后端响应头传递给客户端,proxy_set_header 可添加安全头覆盖后端值。

防止缓存敏感信息

nginx
proxy_no_cache $cookie_session $http_authorization;
proxy_cache_bypass $cookie_session $http_authorization;

带有会话 ID 或认证凭据的响应不缓存,防止用户数据泄露。

请求头安全过滤

限制允许的请求方法

nginx
# 只允许安全方法
if ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE)$) {
    return 405;
}

location /api/ {
    proxy_pass http://backend;
}

清理危险的请求头

nginx
location /api/ {
    proxy_pass http://backend;
    
    # 不转发客户端的 X-Forwarded-* 头,防止头注入
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
    
    # 清空可能恶意的自定义头
    proxy_set_header X-Original-URL "";
}

NGINX 默认会传递所有客户端请求头到后端,攻击者可能伪造 X-Forwarded-For 等头进行欺骗。显式设置而非透传更安全。

代理缓冲区安全

限制缓冲区大小

nginx
location /api/ {
    proxy_pass http://backend;
    
    proxy_buffer_size 4k;
    proxy_buffers 8 4k;
    proxy_busy_buffers_size 8k;
    
    # 限制请求体大小
    client_max_body_size 10m;
    client_body_buffer_size 128k;
}

过大的缓冲区可能成为 DoS 攻击的目标,合理限制可减轻内存耗尽攻击的影响。

防止响应截断

nginx
proxy_max_temp_file_size 1024m;
proxy_temp_file_write_size 32k;

负载均衡器安全

健康检查与故障节点隔离

nginx
upstream backend_pool {
    server 10.0.0.1:8080 max_fails=3 fail_timeout=30s;
    server 10.0.0.2:8080 max_fails=3 fail_timeout=30s;
    server 10.0.0.3:8080 backup;
    
    # 失败节点自动隔离30秒
}

防止直接访问后端

nginx
server {
    listen 80;
    server_name _;
    
    # 默认拒绝所有未匹配的请求
    return 444;
}

server {
    listen 80;
    server_name api.example.com;
    
    location / {
        proxy_pass http://backend_pool;
    }
}

444 是 NGINX 特有状态码,直接关闭连接不返回任何响应,有效防止未授权访问。

要点总结

  • 使用 proxy_hide_header 清除后端暴露的技术栈信息
  • 显式设置转发头而非透传客户端请求头
  • 限制代理缓冲区大小,防止内存耗尽攻击
  • 带有认证凭据的响应不缓存
  • 使用 444 状态码处理未匹配的请求
  • 合理配置 max_failsfail_timeout 自动隔离故障节点

📝 发现内容有误?点击此处直接编辑

← 上一篇 HTTPS与SSL/TLS配置
下一篇 → 日志审计与安全监控
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库