我希望为图像设置一个自定义位置,以便设置更好的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;
}