nginx 位置失败并匹配

nginx 位置失败并匹配

我有类似以下内容的内容:

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 只会使用一个位置。即使您重写请求,它也会应用新位置并忽略旧位置。

相关内容