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

Nginx configuration proxy_pass with conditions based on image extension

我有一个调整大小的服务器图像,具有以下 nginx 配置:

  location ~ ^/assets/([0-9]+)x([0-9]+)/(.+) {
       proxy_pass http://192.168.0.15:9900/fit?width=&height=&interlace=true&url=https://cdn.test.org/assets/;
       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;
  }

下面是在浏览器访问时的URLhttps://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=&height=&interlace=true&url=https://cdn.test.org/assets/;
           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/x/\.png$ {
                proxy_pass http://192.168.0.20:9900/fit?width=&height=&quality=90&interlace=true&url=https://cdn2.test.org/;
      }
  }

请帮忙。

您的 location 块中的正则表达式包含三个数字捕获,分配给 </code>、<code></code>。</p> <p>最终捕获可以包含一个模式,该模式将匹配限制为以 <code>.jpg.png 等结尾的 URI。

例如:

location ~ ^/assets/([0-9]+)x([0-9]+)/(.+\.png)$ { ... }

要匹配两个或多个文件扩展名,请使用交替组。例如:

location ~ ^/assets/([0-9]+)x([0-9]+)/(.+\.(jpg|jpeg))$ { ... }

最后一个示例创建了另一个分配给 </code> 的数字捕获,可以将其忽略。可以使用 non-capturing 组(例如 <code>(?:jpg|jpeg)),但它会使正则表达式难以阅读。