Nginx中配置自定义响应头需用add_header指令,作用域限于location/server块,须注意状态码限制(默认不生效于4xx/5xx)、继承规则及优先级;推荐按路径前缀、文件类型正则、always参数支持错误响应、map变量实现动态复用。

在 Linux 的 Nginx 中配置自定义响应头,核心是使用 add_header 指令,写在 location 或 server 块内。它不依赖额外模块,语法简单,但行为有明确规则——不是“写了就一定生效”,关键要看作用域、状态码范围和继承逻辑。
按路径精准设置(推荐用于静态资源)
适合 CSS、JS、图片等有固定目录结构的资源。用 location 前缀匹配,配合 alias 或 root 定位文件,并只影响该路径下的响应。
location /css/ { alias /var/www/static/css/; add_header Cache-Control "public, max-age=31536000, immutable"; add_header X-Content-Type-Options "nosniff"; }location /admin/ { alias /var/www/static/admin/; add_header Cache-Control "no-store"; add_header X-Frame-Options "DENY"; }- 每个
location是独立作用域,未声明的头不会从server级继承
按文件类型统一设置(适合全站同类资源)
不管文件放在哪条路径下,只要扩展名匹配,就应用相同策略。用正则 location ~* \.(png|jpg|woff2?)$ 实现,注意把它放在配置靠后位置,避免被更具体的前缀 location 覆盖。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
location ~* \.(png|jpg|jpeg|gif|webp|ico)$ { add_header Cache-Control "public, max-age=2592000"; add_header X-Content-Type-Options "nosniff"; }- 正则 location 优先级高于普通前缀,建议集中放在配置末尾
- 可结合
root指令定位文件,无需重复写路径
让错误响应也带自定义头(调试与监控必需)
add_header 默认只对 200、204、301–304、307、308 等状态码生效。4xx/5xx 错误响应里看不到你设的头——这是最常见失效原因。
- 加
always参数:如add_header X-Backend "nginx" always;,就能在 404、500、302 等所有响应中透出 - 适合调试标识(
X-Route)、请求追踪(X-Request-ID)、环境标记(X-Env) - 敏感头(如
Set-Cookie)加always可能被浏览器拒绝,慎用
避免覆盖与遗漏:用 map 实现动态、复用式配置
多个域名或路径需要差异化 Header(如 X-Service: api vs X-Service: admin),硬写一堆 add_header 易错难维护。
- 在
http块顶部定义:map $host $x_service { api.example.com "api"; admin.example.com "admin"; default "web"; } - 然后在任意
location或server中复用:add_header X-Service $x_service; - 变量为空时该头不会发出,所以
default必须设,且匹配是精确字符串(通配需用正则~^.*\.staging\.com$)

















