nginx的 add_header 是给谁添加的?
nginx 中的 add_header 指令是 向 HTTP 响应头(Response Headers)中添加自定义头部字段,也就是说:
✅
add_header是给「客户端」(如浏览器、curl、App 等)返回的响应添加 header 的。
📌 举个例子
server {
listen 80;
server_name example.com;
location /api {
proxy_pass http://backend;
add_header X-Custom-Info "Hello from Nginx";
}
}
当客户端请求 http://example.com/api 时,Nginx 会:
- 把请求转发给后端(
proxy_pass); - 收到后端的响应后,在返回给客户端的响应头中加上:
X-Custom-Info: Hello from Nginx
你在浏览器 DevTools 或 curl -I 中就能看到这个 header。
⚠️ 重要注意事项
1. add_header 只作用于当前 location、server 或 http 块
- 如果你在
server块中定义了add_header,但在某个location块中也定义了add_header,那么server中的 header 会被覆盖(不会继承)!
✅ 正确做法:如果想在多个 location 中复用 header,可以使用 include 或重复写。
# ❌ 错误:/api 不会包含 X-Frame-Options
server {
add_header X-Frame-Options "DENY";
location /api {
add_header X-API-Version "v1"; # 这会导致 X-Frame-Options 丢失!
proxy_pass http://backend;
}
}
✅ 修复方式:在 /api 中显式添加所有需要的 header:
location /api {
add_header X-Frame-Options "DENY";
add_header X-API-Version "v1";
proxy_pass http://backend;
}
💡 这是 Nginx 的一个经典“坑”:子块中的
add_header会完全覆盖父块的add_header。
2. add_header 对 4xx/5xx 错误页面也生效吗?
默认情况下,add_header 只对 2xx 和 3xx 响应生效。
如果你希望在错误响应(如 404、500)中也添加 header,需要加上 always 参数:
add_header X-Content-Type-Options "nosniff" always;
- 不加
always:只在成功响应(200、301 等)中添加; - 加
always:在所有响应(包括 404、500)中都添加。
3. add_header 不影响请求头(Request Headers)
如果你想修改或添加发送给后端的请求头(比如加 X-Forwarded-For),应该用:
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
🔁 总结:
add_header→ 响应头(Response)→ 给客户端proxy_set_header→ 请求头(Request)→ 给后端服务器
✅ 常见用途
| 场景 | 示例 |
|---|---|
| 安全加固 | add_header X-Content-Type-Options "nosniff"; |
| CORS 支持 | add_header Access-Control-Allow-Origin "*"; |
| 缓存控制 | add_header Cache-Control "no-store"; |
| 自定义标识 | add_header X-Powered-By "MyApp"; |
🔧 调试技巧
用 curl 查看响应头是否生效:
curl -I http://your-domain.com/path
检查输出中是否包含你添加的 header。
总结
| 问题 | 答案 |
|---|---|
add_header 是给谁加的? |
给客户端的 HTTP 响应头 |
| 能加到请求头上吗? | ❌ 不能,要用 proxy_set_header |
| 子 location 会继承父 header 吗? | ❌ 不会,会被覆盖 |
| 能在 404 页面加 header 吗? | ✅ 可以,加 always 参数 |
正确理解和使用 add_header,能有效提升 Web 应用的安全性、可维护性和可观测性。

浙公网安备 33010602011771号