反向代理与负载均衡安全
反向代理是 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_fails和fail_timeout自动隔离故障节点
📝 发现内容有误?点击此处直接编辑