如何避免在nginx中重复add_header指令?

时间:2015-02-23 00:17:06

标签: nginx http-headers

文档说明了这一点:

  

当且仅当在当前级别上没有定义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;";
}

看起来不对。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

在包含共享标头的每个位置使用include(这必须重复,但只需要在包含的配置中更新,而不是单独更新每个块)。

答案 1 :(得分:0)

这就是nginx add_header的工作方式。

另一种解决方案是使用非官方的nginx模块ngx_headers_more。它允许设置具有预期行为的标题以及其他功能。它并不适合所有人,因为它不是与nginx一起发布的(尽管它可以通过nginx-extras包在Debian / Ubuntu中使用),而且还需要更新现有的配置。