为何要小心Nginx的add_header指令详解

  

  

大家都知道,nginx配置文件通过使用add_header指令来设置响应头。

  

昨天无聊用旋度查看一个站点的信息,发现返回的头部与想象中的不一样:

        HTTP/200   日期:2019年07年2月的邱04:26:38格林尼治时间   内容类型:text/html;utf - 8字符集=不同:接受编码,饼干   cache - control:信息=3,must-revalidate   last - modified:星期四,07年2月2019 03:54:54 GMT   X-Cache:小姐   服务器:cloudflare   …      

主站点在nginx.conf中配置了hst等标题:

        add_header Strict-Transport-Security”信息=63072000;预加载”;   add_header X-Frame-Options SAMEORIGIN;   add_header X-Content-Type-Options nosniff;   add_header X-XSS-Protection”1;模式=块”;      

但响应头部没有这些头。除了常规的头,仅出现了一个配置配置在位置中的头X-Cache。

  

第一印象是CDN过滤了这些头?于是找Cloudflare的文档,没发现会对这些进行处理。转念一想,CDN过滤这些干啥啊?吃饱了撑的啊?他们又不搞郑审那一套!

  

问题转移到Nginx的配置上。打开谷歌搜索“Nginx add_header位置”,果然发现不少槽点。点开官网add_header的文档,有这样的描述(其他信息已省略):

  
  

可能有几个add_header指令。这些指令是继承了以前的水平如果>   位置/foo1 {   add_header foo1 1;//重写foo2;   }      位置/foo2 {   add_header foo2 1;   返回200“OK”;   }      

不管请求/foo1还是/foo2,最终头只有foo2:

  

为何要小心Nginx的add_header指令详解

  

尽管说得通这是正常行为,但总让人感觉有点勉强和不舒坦:服务器丢掉http配置,位置丢掉服务器配置也就算的了,但两个位置在同一层级啊!

  

不能继承父级配置,又不想在当前块重复指令,解决办法可以用包括指令。

  

<强>参考
  

  
      <李> Nginx模块ngx_http_headers_module李   <李> Nginx add_header配置陷阱李   <李>非常小心和你在Nginx add_header !你可以让你的网站不安全的李   <李> add_header指令位置覆盖add_header指示服务器   <李> nginx配置之add_header的坑李   
  

  

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

为何要小心Nginx的add_header指令详解