Назад | Перейти на главную страницу

Работает только первый виртуальный хост обратного прокси

Я пытаюсь перенаправить службы, работающие на локальном хосте под разными портами, на подпуть на одном порту. Например http://127.0.0.100:5687/ к http://127.0.0.1/app/.

Проблема, с которой я столкнулся, заключается в том, что работает только первый блок виртуального хоста. Если я поменяю местами 2 хоста, будет работать только самый верхний / первый хост. Все остальные хосты возвращают ошибку Not Found.

Вот рассматриваемые директивы apache:

<VirtualHost *:80>
  ServerName app1.example.com
  #ServerAlias app1
  ProxyRequests Off
  ProxyPass /app1 http://127.0.0.1:6687/
  ProxyPassReverse /app1 http://127.0.0.1:6687/
</VirtualHost>

<VirtualHost *:80>
  ServerName app2.example.com
  #ServerAlias app2
  ProxyRequests Off
  ProxyPass /app2 http://127.0.0.1:7687/
  ProxyPassReverse /app2 http://127.0.0.1:7687/
</VirtualHost>

Что я здесь не вижу? Почему работает только первый виртуальный хост?

Ни один из ваших VirtualHost блоки матчей 127.0.0.1, поэтому Apache берет первый найденный блок.

Ваши виртуальные хосты отличаются ServerName. Если вы хотите достичь обоих /app1 и /app2 с участием 127.0.0.1 вы должны разместить оба ProxyPass директивы в том же VirtualHost блок.

<VirtualHost *:80>
  ServerName app1.example.com
  ServerAlias app2.example.com
  ProxyRequests Off
  ProxyPass /app1 http://127.0.0.1:6687/
  ProxyPassReverse /app1 http://127.0.0.1:6687/
  ProxyPass /app2 http://127.0.0.1:7687/
  ProxyPassReverse /app2 http://127.0.0.1:7687/
</VirtualHost>

Или просто используйте ServerName вместо этого в ваших http-запросах.

http://app1.example.com/app1/
http://app2.example.com/app2/

В /app* в любом случае избыточно, я бы просто отбросил его и использовал ProxyPass / http://... с двумя VirtualHosts.