Я пытаюсь настроить несколько docker
контейнеры с одним и тем же изображением на одном компьютере и размещение всего приложения в одном домене, разделенных путем. Цель состоит в том, чтобы изолировать каждого клиента в его собственном контейнере. т.е. mydomain.com/aaa
, mydomain.com/bbb
... и т.д.
я использую nginx
в качестве обратного прокси и следовал различным примерам в Интернете. Моя конфигурация nginx выглядит так:
server {
listen ...;
...
location / {
proxy_pass http://127.0.0.1:8080;
}
location /aaa {
proxy_pass http://127.0.0.1:8181;
}
location /bbb {
proxy_pass http://127.0.0.1:8282;
}
...
}
Я заметил, что приложение будет размещено в корне /
которые в настоящее время заканчиваются на 404. Есть ли умный способ переписать их на свой собственный путь на основе источника запроса без изменения самого приложения?
Я знаю, что может быть проще использовать поддомен, но я не хочу добавлять и удалять поддомен по мере того, как клиенты приходят и уходят.
Простой ответ - нет.
Вы должны рассмотреть как минимум три аспекта принуждения приложения к удалению от корня.
proxy_pass
или rewrite
proxy_redirect
Последний пункт непростой. Приложения, которые ожидают, что они будут жить в корне, обычно обращаются к своим ресурсам относительно корня, что означает, что они попадают в неправильное место на обратном прокси.
В Apache есть модуль, который может перезаписывать URL-адреса, встроенные в документ HTML, но мне это кажется неэффективным.
Предпочтительным решением является изменение приложения, чтобы сделать его URL-адреса ресурсов и гиперссылок относительным путем или с префиксом одного и того же настраиваемого пути.
Я пытаюсь выполнить ту же настройку, поэтому столкнулся с той же проблемой. Мне кажется, что на самом деле нужно изменить серверные приложения, как это описывает Ричард Смит. Использование других «внешних» портов для nginx - это обходной путь, но не изящный.