千家信息网

nginx配置教程之add_header的坑详解

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,前言add_header 是 headers 模块中定义的一个指令,顾名思义就是用来添加 http 响应头的。但请注意他只是「添加」而已,并不是重写。所以如果已经存在某个头,再使用 add_heade
千家信息网最后更新 2026年11月03日nginx配置教程之add_header的坑详解

前言

add_header 是 headers 模块中定义的一个指令,顾名思义就是用来添加 http 响应头的。但请注意他只是「添加」而已,并不是重写。所以如果已经存在某个头,再使用 add_header 就会出问题。而且在低版本的 nginx 中 add_header 还不支持在错误页面中使用。

这是一个坑比较多的指令。它的处理阶段比 location 处理晚,虽然可以写在 location 中,但如果 rewrite 别的 location,那么上一个 location 中尚未处理的 add_header 就会丢失。比如:

location = /a { add_header a 1; rewrite / /b;}location = /b { add_header b 2; return 204;}

并没有 a 1 这个头吧?这就是一个坑!

另一个坑就是一开始说的重复的问题,比如我希望给一个内容设置 Content-Type,但是由于全局有设置一个 default_type,所以就重复了。

default_type 'text/plain';location = /a { add_header Content-Type application/json; return 200 '"OK"';}

解决的办法当然有很多比如对这个 location 将 default_type 置空,或者干脆不用 add_header,直接针对这个 location 修改 default_type。

最后一个大坑就是对错误页面无法生效,这也是在文档中有明确定义的。比如下面这个例子:

location = /a { add_header Content-Type application/json; return 404 '"Not Found"';}

我希望响应一个 JSON,然而由于状态码是 404,所以这里的 add_header 并不会生效。

虽然这个例子可以用 default_type 来解决问题,但如果是其它头呢?比如 Access-Control-Allow-Origin 要怎么办?那么除了使用 lua 或其它第三方模块来解决之外就无解了。nginx 当然也意识到了这个问题,所以文档中也说了在 1.7.5 版本之后支持一个叫 always 的参数。虽然 nginx 自己解决了这个问题,但基于 1.6.2 的 tengine 就要呵呵了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。

就是 问题 内容 处理 支持 例子 指令 文档 模块 版本 页面 学习 顾名思义 不用 价值 全局 前言 办法 参数 只是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 华服互联网科技怎么样 互联网与科技金融数据 互联网科技与金融科技 高科技与互联网 亿策互联网科技 狮子座互联网科技有限公司 齐家互联网科技有限公司 互联网科技博客 互联网科技类展会 滨湖区互联网智能科技产品供应 承德科技产业互联网发展 武汉健翔互联网络科技有限公司 华夏互联网科技业 互联网科技人工智能实验室 互联网新科技动漫ppt素材 四川慕妮娅互联网科技有限公司 卓翼科技产业互联网合作 工业互联网山东科技大学 广州燕处互联网科技有限公司 科技信息时代互联网发展 互联网通讯科技 世界互联网领先科技成果 易通互联网络科技有限公司 互联网科技网站 武汉健翔互联网络科技有限公司 移动互联网科技公司 民营互联网公司国防科技 上海互联网科技公司ppt 上海乐五互联网科技有限公司 互联网科技创业计划的风险分析
0