我有类似以下内容的内容:
server {
server_name my.com;
location /media/ {
alias /home/my/media/;
expires 1h;
}
location / {
include fastcgi_params;
}
}
我想添加第二个 /media/ 位置块,它只捕获 css 和 js 文件并将过期时间设置为最大值。
理想情况下,我还想处理现有的 /media/ 块。即,我只想覆盖过期时间,但也处理主块中的任何指令。
答案1
使用嵌套位置将允许您执行所需的操作:此外,当位置与别名指令的后缀匹配时,仅使用 root 会更有效:
location /media/ {
root /home/my;
expires 1h;
location ~ \.(css|js)$ {
expires max;
}
}
如果实际配置没有匹配的 /media/,您可以将其改回别名。此方法还有一个优点,即不会尝试匹配每个请求的正则表达式,而只匹配以 /media/ 开头的请求。
答案2
location ~ ^/media/.+\.(css|js)$ {
expires max;
}
请注意,您不能让它同时解析两个位置。Nginx 只会使用一个位置。即使您重写请求,它也会应用新位置并忽略旧位置。