例如,如果对图像发出如下请求...
/static/images/00f37ac6291bb6e8_150.jpeg
但是 150px 缩略图版本尚未生成并返回 404,我想让它尝试始终可用的全尺寸基础图像......
/static/images/00f37ac6291bb6e8.jpeg
我怎样才能让 nginx 做到这一点?
这是我已经开始做的,但我在弄清楚正则表达式时遇到了问题。我也不知道这是否是实现此目的的最佳方法。
location /static/ {
resolver 8.8.8.8;
try_files $uri @redirect;
proxy_pass https://s3.amazonaws.com/<buckets>$request_uri;
}
location @redirect {
rewrite ^(.*)(?=_)(\.*)$ https://s3.amazonaws.com/<buckets>$1;
}
这也是我使用该正则表达式进行正则表达式的结果...我不知道如何获取文件扩展名。
更新:
这就是我最终做的,而且效果很好!
location /static/images/ {
resolver 8.8.8.8;
proxy_intercept_errors on;
proxy_pass https://s3.amazonaws.com/my-bucket$request_uri;
error_page 400 401 402 403 404 @redirect;
}
location @redirect {
rewrite ^(.*)\/(.*)(_)[0,1](.*)\.(.+)$ https://s3.amazonaws.com/my-bucket/images/$2.$5;
}
答案1
我去了regex101.com进行测试,此正则表达式^(.*)\/(.*)(_)[0,1](.*)\.(.+)$
与字符串匹配/static/images/00f37ac6291bb6e8_150.jpeg
。通过此匹配,$1/$2.$5 将成为更大图像的路径。