Можно ли «подключить» разные веб-сервисы (предоставленные из разных контейнеров докеров) на один и тот же сервер nginx?
Вот простой пример, чтобы получить общее представление:
сервер {
слушать 80;
слушать [::]:80;
client_max_body_size 10M;
кодировка utf-8;
имя_сервера my.server.org;
журнал_доступа /var/log/nginx/reverse-access.log;
error_log /var/log/nginx/reverse-error.log;
место расположения / {
включить proxy_params;
прокси_пароль http://127.0.0.1:8081/;
}
местоположение /статическое/ {
включить proxy_params;
включить /etc/nginx/mime.types;
псевдоним /var/www/app/static/;
}
местоположение ^~ /app2/ {
включить proxy_params;
прокси_пароль http://127.0.0.1:8082;
}
местоположение ^~ /app3/ {
включить proxy_params;
прокси_перенаправление выключено;
proxy_set_header Хост $http_host;
прокси_пароль http://127.0.0.1:8083;
}
}
куда место расположения /
является корнем первого приложения вместе с его статическими файлами в следующем блоке местоположения.
Это первое приложение работает на http://my.server.org/.
Я хотел бы получить доступ к двум другим приложениям в http://my.server.org/app2/ и http://my.server.org/app3/ при сохранении того же имени сервера мой.server.org
.
Эти приложения связаны с основным, но они полностью независимы, т. е. обслуживаются от других докер-композиций, при этом их порты выставлены соответственно на 8082 и 8083.
Возможно ли решить такую простую задачу в рамках уникального сервер
блокировать?
На данный момент я получил 404 при переходе к этим двум другим URL-адресам.
В основном я хочу сопоставить эти рабочие URL-адреса + порты и все их дочерние элементы с именованными местоположениями:
http://my.server.org:8081/... -> http://my.server.org/...
http://my.server.org:8082/... -> http://my.server.org/app2/...
http://my.server.org:8083/... -> http://my.server.org/app3/...
РЕДАКТИРОВАТЬ:
либо это:
местоположение /приложение3/ {
если ($http_referer ~ "^$схема://$http_host/app3/") {
переписать ^/app3/(.*) $scheme://$http_host/app3/$1 редирект;
}
включить proxy_params;
прокси_перенаправление выключено;
proxy_set_header Хост $http_host;
прокси_пароль http://127.0.0.1:8083;
}
или это:
расположение ~*/app3/(.*)$ {
включить proxy_params;
прокси_перенаправление выключено;
proxy_set_header Хост $http_host;
прокси_пароль http://127.0.0.1:8083/$1;
}
"работают" одинаково, но все же не идеально, потому что осталось две проблемы:
- обслуживается только необработанный HTML (например, без стилей: например, «502 bad gateway» в файлах css)
- ссылки внутри страниц указывают, например.
http://my.server.org/subfeature/subitem
вместо http://my.server.org/app3/subfeature/subitem
. Следовательно, им «не хватает» /приложение3
префикс, и я не знаю, как его добавить, если его нет там, где он должен быть.