问题描述
我使用以下nginx配置调整了服务器映像的大小:
location ~ ^/assets/([0-9]+)x([0-9]+)/(.+) {
proxy_pass http://192.168.0.15:9900/fit?width=$1&height=$2&interlace=true&url=https://cdn.test.org/assets/$3;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-FRAME-OPTIONS SAMEORIGIN;
proxy_set_header X-Forwarded-For $remote_addr;
}
,以下是在浏览器中访问时的URL:https://test.org/100x100/upload/image.jpg。
,我目前有2个图像调整大小服务器,1个用于jpg,1个用于png。如果要为jpeg请求文件,我将如何确定,然后将其定向到第一个代理服务器通行证,如果是png,则将其定向到第二个代理服务器通行证。而不删除宽度($ 1),高度($ 2)和后面的文件夹($ 3)的变量值。
location ~ ^/assets/([0-9]+)x([0-9]+)/(.+) {
proxy_pass http://192.168.0.15:9900/fit?width=$1&height=$2&interlace=true&url=https://cdn.test.org/assets/$3;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-FRAME-OPTIONS SAMEORIGIN;
proxy_set_header X-Forwarded-For $remote_addr;
location ~ ^/assets/$1x$2/$3\.png$ {
proxy_pass http://192.168.0.20:9900/fit?width=$1&height=$2&quality=90&interlace=true&url=https://cdn2.test.org/$3;
}
}
请帮助。
解决方法
location
块中的正则表达式包含三个数字捕获,分别分配给$1
,$2
和$3
。
最终捕获可以包含一种模式,该模式将匹配限制为以.jpg
或.png
等结尾的URI。
例如:
location ~ ^/assets/([0-9]+)x([0-9]+)/(.+\.png)$ { ... }
要匹配两个或多个文件扩展名,请使用替代组。例如:
location ~ ^/assets/([0-9]+)x([0-9]+)/(.+\.(jpg|jpeg))$ { ... }
最后一个示例创建另一个分配给$4
的数字捕获,可以忽略该捕获。可以使用非捕获组(例如(?:jpg|jpeg)
),但会使正则表达式难以阅读。