文档说明了这一点:
当且仅当在当前级别上没有定义add_header指令时,这些指令继承自上一级别。
我的问题是我想要缓存几个location
块,比如这个:
add_header X-Frame-Options SAMEORIGIN;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
location ~ ^/img/(.*)\.(png|jpg|jpeg|gif|bmp)$ {
expires 1w;
add_header Cache-Control public;
}
但这将使我失去在块外宣布的所有标题。显然,唯一的方法是在每个location
块上复制这些标头,例如:
add_header X-Frame-Options SAMEORIGIN;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
location ~ ^/img/(.*)\.(png|jpg|jpeg|gif|bmp)$ {
expires 1w;
add_header Cache-Control public;
add_header X-Frame-Options SAMEORIGIN;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
}
看起来不对。有什么想法吗?
答案 0 :(得分:5)
在包含共享标头的每个位置使用include
(这必须重复,但只需要在包含的配置中更新,而不是单独更新每个块)。
答案 1 :(得分:0)
这就是nginx add_header
的工作方式。
另一种解决方案是使用非官方的nginx模块ngx_headers_more。它允许设置具有预期行为的标题以及其他功能。它并不适合所有人,因为它不是与nginx一起发布的(尽管它可以通过nginx-extras包在Debian / Ubuntu中使用),而且还需要更新现有的配置。