"proxy_pass" cannot have URI part in location given by regular expression

Возник вопрос с настройкой nginx. У меня есть такой конфиг nginx.conf, который работал исправно. отдавал все картинки и документы на сайте.

server {
  listen 443 ssl
  ...
  servername my-site.ru
  location / {
    proxy_pass https://storage.yandexcloud.net;
  }
  location ~ ^(.+)\.(png|jpe?g|JPE?G|PNG)${
    if ($http_accept ~* "webp") {
       add_header Content-Type image/webp;
       add header Timing-Allow-Origin *;
       rewrite (.*) $1.webp break;
    }
      proxy_pass https://storage.yandexcloud.net;
      proxy hide header Content-Type;
}

теперь возникла необходимость изменить proxy_pass и теперь мой конфиг выглядит так:

server {
  listen 443 ssl
  ...
  servername my-site.ru
  location / {
    proxy_pass https://storage.yandexcloud.net/<my-bucket>;
  }
  location ~ ^(.+)\.(png|jpe?g|JPE?G|PNG)${
    if ($http_accept ~* "webp") {
       add_header Content-Type image/webp;
       add header Timing-Allow-Origin *;
       rewrite (.*) $1.webp break;
    }
      proxy_pass https://storage.yandexcloud.net/<my-bucket>;
      proxy hide header Content-Type;
  }
...
}

И вот если первый "location /" отрабатывает без проблем (все документы и файлы отображаются по запросу), то второй в котором идёт обработка WEBP, выдаёт ошибку: 1#1: "proxy_pass" cannot have URI part in location given by regular expression, or inside named location, ar inzide "if" statement, or inside "limit_except" block in /etc/nginx/conf.d/nginx.conf

что говорит о том, что нельзя использовать URI в именном location, но я никак не могу обойти эту проблему. Прошу, подскажите, как отдавать WEBP, если такая картинка есть в бакете и JPG или PNG - если нет, но при этом, чтобы proxy_pass был URI(https://storage.yandexcloud.net/my-bucket/), а не URL(https://storage.yandexcloud.net)


Ответы (1 шт):

Автор решения: Alexey Ten

Это требование легко обходится rewrite-ом.

location ~ \.(png|jpe?g|JPE?G|PNG)$ {
  if ($http_accept ~* "webp") {
    add_header Content-Type image/webp;
    add_header Timing-Allow-Origin *;
    rewrite (.+) $1.webp;
  }
  rewrite (.+) /<my-bucket>$1 break;

  proxy_pass https://storage.yandexcloud.net;
  proxy_hide_header Content-Type;
}
→ Ссылка