我有一个 nginx 配置,其中有很多location
部分location /
。这是因为我们为其他类型的内容等设置了各种缓存策略。
但是,现在我需要一个通用的 http 标头 ( Content-Security-Policy
),因此我已将其添加到根位置。但它仅适用于未列出的资源(在我的情况下为favicon.ico
)。
我是否真的需要将我的标题复制到所有嵌套位置,或者是否可以为整个部分定义通用配置?
这是我的配置:
location / {
root /usr/share/nginx/html;
index index.html index.htm;
add_header Content-Security-Policy "script-src 'self';";
location ~* \.htm(l?) {
}
location ~* \.js {
add_header Cache-Control 'max-age=86400';
}
location ~* \.css {
...
}
location ~* \.(jpg|jpeg|svg|png) {
add_header Cache-Control 'max-age=43200';
}
}
答案1
我建议使用map
类似下面的方法:
map $sent_http_content_type $expires {
application/javascript 86400;
default off;
~image/ 43200;
}
然后您可以将配置减少到:
expires $expires;
在您的顶层位置,摆脱单个add_header Cache-Control ...
指令,同时能够添加指令add_header Content-Security-Policy ...
。