Nginx 提供了多种方式来添加自定义 HTTP 头部,无论是对传入的请求还是对外发出的响应,都能实现精细控制。以下是详细的配置方法和应用场景:
1. 使用 add_header 指令
add_header 指令是最常用的方法之一,在 Nginx 配置中添加或覆盖 HTTP 响应头部:
location / {
add_header X-Site-Name "My Website";
add_header Content-Encoding gzip;
# 添加多个头部
add_header Cache-Control "no-store, no-cache, must-revalidate";
add_header Pragma "no-cache";
}
2. 使用 more_set_headers 模块
如果安装了 more_set_headers 模块,可以更灵活地设置和修改头部:
location / {
more_set_headers "X-Site-Name: My Website";
more_set_headers "Content-Type: application/json";
}
3. 替换或删除现有头部
使用 more_set_headers 或 unset_header 删除现有头部:
more_set_headers "Content-Type: application/json";
unset_header Date;
4. 基于变量添加头部
根据条件或请求中的变量添加头部:
set $is_secure "off";
if ($scheme = https) { set $is_secure "on"; }
location / {
add_header X-Secure-Request $is_secure;
}
5. 安全相关的头部
加强安全性的头部设置,如 HSTS (HTTP Strict Transport Security),CSP (Content Security Policy):
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options nosniff;
6. 日志和监控相关的头部
添加自定义头部可以帮助日志记录和监控:
add_header X-Request-ID $request_id always;
7. 传递请求头到后端
使用 proxy_set_header 在反向代理中传递或修改请求头:
location / {
proxy_pass http://backend;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
}
8. 从请求头部中提取数据
利用 $http_* 变量获取请求头部:
add_header X-Requested-With $http_x_requested_with;
注意事项
- 添加或修改头部时,确保遵循 HTTP 规范,避免冲突或误解。
- 测试新加入的头部是否影响现有的安全设置或第三方应用。
- 定期审查头部设置,确保它们仍然符合最新的安全标准和业务需求。
通过以上方法,你可以在 Nginx 中灵活地添加、替换或删除自定义 HTTP 头部,实现更细粒度的控制。这些技术不仅增强了安全性,也提高了可调试性和性能。