NGINX: try_files с proxy_pass в контейнере докеров

Я использую nginx в качестве обратного прокси-сервера для своих приложений Node.js, которые работают на localhost:3000. И сам nginx, и мое приложение — это два отдельных докер-контейнера. (Отдельно, потому что позже я планирую добавить в него больше приложений.)

В моем контейнере приложения у меня есть некоторые.webpальтернативные изображения. Например

      $ ls
 
/app/assets/img/image.jpeg
/app/assets/img/image.jpeg.webp
/app/assets/img/other.jpeg

Я пробовал использоватьtry_filesс nginx, но, насколько я знаю, это невозможно, потому что try_files не «видит» мои файлы внутри другого контейнера докеров, если они не используют общий том. Чего они не могут. Контейнер приложения со всем необходимым внутри создается где-то в другом месте.

Что у меня сейчас есть, так это:

      upstream app {
  server localhost:3000;
}

[...]

location ~* .+\.(jpg|jpeg|svg|png)$ {
  proxy_pass http://app$uri$webp_suffix;
}

[...]

location / {
  proxy_pass http://app;
}

Это на самом деле работает. Клиент запрашивает.jpgизображение и получает (потому что он с этим справится). Проблема в том, что он всегда получает.jpg.webp. Что мне нужно, так это проверить, доступен ли запрошенный файл в моем приложении.

Так может быть что-то подобное? Но это не работает :-(

      
location ~* .+\.(jpg|jpeg|svg|png)$ {
  if (-f http://app$uri$webp_suffix) {
    proxy_pass http://app$uri$webp_suffix;
  }
  proxy_pass http://app$uri;
}

0 ответов

Другие вопросы по тегам