Apache в качестве прокси для использования одного и того же URL с подчиненными маршрутами для разных приложений - PullRequest
1 голос
/ 12 апреля 2019

Я пытаюсь настроить веб-сервер Apache2 в качестве прокси-сервера для перенаправления запросов к различным приложениям, работающим на сервере, в отдельных контейнерах Docker.

Все запросы направляются на маршрут http://my_url.com/App2 должно быть направлено на приложение App2, работающее с localhost: 8002 .Все остальные запросы к http://my_url.com должны быть перенаправлены в приложение App1, работающее на localhost: 8001 .

Я использовал следующий файл конфигурации Apache:

VirtualHost my_url.com/:80>
    ServerName my_url.com
    ServerAlias www.my_url.com
    ProxyPreserveHost On

    ProxyPass /App2/ http://localhost:8002/
    ProxyPassReverse /App2/ http://localhost:8002/

    ProxyPass / http://localhost:8001/
    ProxyPassReverse / http://localhost:8001/
</VirtualHost>

Если я пытаюсь получить доступ к App2, он первоначально перенаправляется в правильный контейнер Docker.Однако проблема заключается в том, что если App2 выполняет перенаправление, например, на маршрут / login , то подкат / App2 / теряется, и Apache пытается найти / login в контейнере App1.

Что должно произойти: App2 хочет перенаправить на / login и предоставляет браузеру доступ my_url.com / App2 / login , а не my_url.com / login .

Это достижимо только с помощью конфигураций Apache или мне нужно изменить перенаправления в контейнере Docker App2?

1 Ответ

0 голосов
/ 21 мая 2019

Проблема была в строке ProxyPreserveHost On.Это привело к тому, что Apache добавил поле заголовка:

X-Forwarded-Host: 'my_url.com'

для каждого запроса.Вот почему ProxyPassReverse:

ProxyPassReverse /App2/ http://localhost:8002/

не работал, поскольку он только переписывает запросы от http://localhost:8002/.

Установка ProxyPreserveHost Off (что также является значением по умолчанию) решает проблему дляя.

...