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;
}