`expire max` 与 `rewrite` 和 `break` 一起使用

`expire max` 与 `rewrite` 和 `break` 一起使用

我是 Nginx 配置的新手。我正在尝试/api使用以下配置将请求从子目录重写到正确的路径:

location ~ ^/api/ {
  root $backend_folder;
  rewrite  ^/api(.*) /$1 break;
  try_files $uri $uri/ /index.php$is_args$args;
}

一切都按我预期的那样工作:目录中有一个 jpg 文件$backend_folder/media/image.jpg,并且 URLhttp://example.com/api/media/image.jpg可用。但是当我添加缓存配置时:

location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt|svg)$ { access_log off; expires max; }

我已经开始在这个 URL 上得到 404 错误。

更改后的整体配置如下:

...
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt|svg)$ { access_log off; expires max; }
...
location ~ ^/api/ {
  root $backend_folder;
  rewrite  ^/api(.*) /$1 break;
  try_files $uri $uri/ /index.php$is_args$args;
}

我想知道这为什么不起作用?

答案1

Nginx 选择一个位置来处理请求。配置中的两个位置是互斥的。请参阅Nginx 如何处理请求

您可以考虑嵌套位置,或使用地图来设置过期指令。

例如:

map $request_uri $expires {
    default                                                  off;
    ~\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt|svg)($|\?)  max;
}
expires $expires;

这个文件了解详情。

相关内容