如何避免 Nginx Location Config 中的重复配置

如何避免 Nginx Location Config 中的重复配置

以此 Nginx 位置配置为例:

location ~* \.(gif|jpg|jpeg|swf|css)$ {
  add_header Cache-Control "max-age=259200, public";
}

location ^~ /abc/ {
  try_files $uri /abc/generic.png;
}

对于请求 /abc/x.jpg,它将匹配第二个位置,并且响应将不包含 Cache-Control 标头。如何才能将 Cache-Control 标头也应用于 /abc/x.jpg?

类似这样的方法可以工作,但有点重复。

location ~* \.(gif|jpg|jpeg|swf|css)$ {
  add_header Cache-Control "max-age=259200, public";
}

location ^~ /abc/ {
  try_files $uri /abc/generic.png;

  location ~* \.(gif|jpg|jpeg|swf|css)$ {
    add_header Cache-Control "max-age=259200, public";
  }
}

答案1

您可以使用类似这样的东西。

location ~* \.(gif|jpg|jpeg|swf|css)$ {
  add_header Cache-Control "max-age=259200, public";
}

location /abc {
  try_files $uri /abc/generic.png;
}

在 Nginx 中,优先级如下:首先是 = (相等),然后是 ^~ (无正则表达式),然后是 ~ (区分大小写),然后是 ~* (不区分大小写),然后是无。由于代码已更改为 /abc,其优先级降至最低,因此当找到以给定图像扩展名结尾的 URI 时,将首先调用第一个位置块。如果没有找到,并且如果 URI 包含 /abc 阻止诸如 /abc/file/file.pdf、/abc/file.pdf 之类的内容,则会调用另一个位置块。

相关内容