Nginx配置proxy_pass具有基于图像扩展的条件

问题描述

我使用以下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)),但会使正则表达式难以阅读。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...