为什么不总是继承add_header指令(基本原理)

  • 本文关键字:指令 header add 继承 nginx
  • 更新时间 :
  • 英文 :


Nginx决定只从具有任何语句的最低级别继承add_header语句背后的理由是什么?

例如:

server {
    server_name example.com;
    root my/root;
    listen 443 ssl;
    ssl_certificate         my.cert;
    ssl_certificate_key     my.key;
    add_header  Strict-Transport-Security "max-age=31536000; includeSubdomains; preload" always;
    add_header  X-Frame-Options SAMEORIGIN;
    add_header  X-Content-Type-Options nosniff;
    add_header  Content-Security-Policy: default-src 'self' https:;
    location ~* .(gif|jpeg|jpg|png|css|js|ico|txt)$ {
        add_header Cache-Control "public, max-age=86400";
    }
}

这些与安全相关的标头都不会添加到与location块匹配的资产中,专用于增加缓存时间,只是因为它添加了另一个标头。

解决方法是将所有add_header指令复制到块中,这似乎与 Nginx 其余部分的工作方式(例如 root 指令(背道而驰。

此处记录了该行为:

可能有几个add_header指令。当且仅当当前级别上未定义add_header指令时,这些指令从上一个级别继承。

http://nginx.org/en/docs/http/ngx_http_headers_module.html#add_header

我想有一个很好的解释,我很好奇它是什么。

理解 -

nginx 没有继承add_header指令 ->我的解决方案是每个位置都包含单独的配置文件......并且不在服务器级别定义add_header。

最新更新