Nginx:如何为特定文件夹下的所有文件设置headers
Nginx: How to set headers for all the files under a specific folder
假设我的应用程序文件位于
https://myapp.com/v1/assets/images/*.jpg
和
https://myapp.com/v1/assets/js/*.jpg
我想添加一条规则,将 no-cache headers 设置为 /assets
下的任何内容
我相信我现在能做的是
location ~ .*assets/js/.*$ {
add_header Cache-Control "public, max-age=0, no-store";
}
location ~ .*assets/images/.*$ {
add_header Cache-Control "public, max-age=0, no-store";
}
但这似乎不起作用,而且如果资产下还有很多其他文件夹,我将需要添加一个单独的规则。
我可以将所有内容分组到一个模式中,以便 /assets/* 下的任何内容都具有 header 吗?
谢谢
这可以通过 map
指令完成:
map $uri $cache_control {
~/assets/(images|js)/ "no-cache, no-store, must-revalidate";
}
server {
...
add_header Cache-Control $cache_control;
...
}
如果您的 URI 与正则表达式不匹配,$cache_control
变量将具有空值并且 nginx 不会将 header 添加到其响应中。然而,还有其他 nginx 指令可能会影响 Cache-Control
header,即 expires
。如果你的配置中有类似 expires <value>;
的东西,你可以使用两个 map
块:
map $uri $cache_control {
~/assets/(images|js)/ "no-cache, no-store, must-revalidate";
}
map $uri $expire {
~/assets/(images|js)/ off;
default <value>;
}
server {
...
expires $expire;
add_header Cache-Control $cache_control;
...
}
并查看 this 答案,不要对 add_header
指令行为感到惊讶。
假设我的应用程序文件位于
https://myapp.com/v1/assets/images/*.jpg
和
https://myapp.com/v1/assets/js/*.jpg
我想添加一条规则,将 no-cache headers 设置为 /assets
下的任何内容我相信我现在能做的是
location ~ .*assets/js/.*$ {
add_header Cache-Control "public, max-age=0, no-store";
}
location ~ .*assets/images/.*$ {
add_header Cache-Control "public, max-age=0, no-store";
}
但这似乎不起作用,而且如果资产下还有很多其他文件夹,我将需要添加一个单独的规则。
我可以将所有内容分组到一个模式中,以便 /assets/* 下的任何内容都具有 header 吗?
谢谢
这可以通过 map
指令完成:
map $uri $cache_control {
~/assets/(images|js)/ "no-cache, no-store, must-revalidate";
}
server {
...
add_header Cache-Control $cache_control;
...
}
如果您的 URI 与正则表达式不匹配,$cache_control
变量将具有空值并且 nginx 不会将 header 添加到其响应中。然而,还有其他 nginx 指令可能会影响 Cache-Control
header,即 expires
。如果你的配置中有类似 expires <value>;
的东西,你可以使用两个 map
块:
map $uri $cache_control {
~/assets/(images|js)/ "no-cache, no-store, must-revalidate";
}
map $uri $expire {
~/assets/(images|js)/ off;
default <value>;
}
server {
...
expires $expire;
add_header Cache-Control $cache_control;
...
}
并查看 this 答案,不要对 add_header
指令行为感到惊讶。