Рейтинг:0

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

флаг cn

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

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

$ лс
 
/приложение/активы/img/image.jpeg
/приложение/активы/img/image.jpeg.webp
/app/assets/img/other.jpeg

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

Что у меня есть прямо сейчас это:

вышестоящее приложение {
  локальный хост сервера: 3000;
}

[...]

расположение ~* .+\.(jpg|jpeg|svg|png)$ {
  proxy_pass http://app$uri$webp_suffix;
}

[...]

место расположения / {
  прокси_пасс http://приложение;
}

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

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


расположение ~* .+\.(jpg|jpeg|svg|png)$ {
  если (-f http://app$uri$webp_suffix) {
    proxy_pass http://app$uri$webp_suffix;
  }
  прокси_пароль http://app$uri;
}
флаг jp
Просто скопируйте assest в образ nginx.
Рейтинг:1
флаг us

Вы не можете реализовать такую ​​удаленную проверку в nginx. И даже если бы вы могли, это было бы медленно, потому что nginx нужно было бы сделать два запроса для обслуживания одного файла.

Предпочтительным решением является либо копирование/распространение ресурсов в место, где nginx может получить к ним доступ.

Другим решением является реализация логики в вашем приложении, которая проверяет расширения файлов и соответствующим образом обслуживает файлы. Затем простой proxy_pass достаточно во внешнем интерфейсе nginx.

Третий вариант — включить nginx также в контейнер приложения. В этом случае простой proxy_pass можно использовать во внешнем интерфейсе nginx.

YeppThat'sMe avatar
флаг cn
Хорошо, это то, что я думал, тбх. Но спасибо!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.