具有未知子文件夹深度的nginx位置

问题描述 投票:0回答:1

我想为图像设置一个自定义位置,以便设置更好的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测试仪进行表达,并成功。感谢对此的任何帮助。

regex nginx nginx-location
1个回答
0
投票

如果将示例中的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进行主动缓存:

immutable
© www.soinside.com 2019 - 2024. All rights reserved.