nginx位置,子文件夹深度未知



我希望为图像设置一个自定义位置,以便设置更好的expires值并将其从access.log中删除。

图像的本地路径类似于/var/www/html/public/image/user/{username}/{?subfolder}/filename.jpg

图像所在的位置可以有一个或多个子文件夹。

url应该看起来像http://example.com/image/user/{username}/{?subfolder}/filename.jpg。由于user可能有不同的文件夹,具有不同的文件夹深度,我无法对其进行硬编码。

我用这个位置规则尝试过,但nginx试图在默认根目录中定位它,而不是在指定的根目录中。

location /image/[^\]+/.*.(jpg|jpeg|gif|png|css|ico)$ {
root /var/www/html/public/image;
expires           30d;
}

我在PCRE测试仪上尝试了这个表达,结果成功了。感谢您的帮助。

如果像示例中那样将root设置为/var/www/html/public/image,则对/image/user/foo.jpg的请求将以/var/www/html/public/image/image/user/foo.jpg结束,这是不希望的。所以我认为你不应该触摸root(它必须指向public目录(。

简单地说:

location ^/image/.*/.*.(jpg|jpeg|gif|png|css|ico)$ {
expires 30d;
}

将完成这项工作。

如果你的文件名以某种方式被散列/版本化(例如foo.123.jpg(,你可以使用immutable进行主动缓存:

location ^/image/.*/.*.(jpg|jpeg|gif|png|css|ico)$ {
immutable on;
}

最新更新