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

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

У меня сервер Apache работает на 80-м порту.

У меня также есть Geoserver, работающий в Jetty на порту 8080. Чтобы избежать перекрестных проблем в JavaScript, я хочу, чтобы любой запрос, который приходит http://example.com/geoserver, проксируется на http://servername:8080/geoserver

В настоящее время для этого я использую Virtual_host и mod_proxy. Мой httpd.conf имеет следующий код:

<VirtualHost  *:80>
   ProxyPass /geoserver http://localhost:8080/geoserver
   ProxyPassReverse /geoserver http://localhost:8080/geoserver
</VirtualHost>

Теперь мне нужно, чтобы Apache служил обратным прокси для другого приложения, работающего с node.js на порту 5000. Если я добавлю следующий код в свой http.conf:

<VirtualHost  *:80>
   ProxyPass /DocHub http://localhost:5000
   ProxyPassReverse /DocHub http://localhost:5000
</VirtualHost>

Я получаю следующее предупреждение в журналах Apache: _default_ VirtualHost overlap on port 80, the first has precedence. И просьба к http://example.com/DocHub дает ошибку 404.

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

Вот как я заставил его работать. Я не уверен, правильный это путь или неправильный. Может быть, кто-то более опытный с Apache сможет внести свой вклад.

Вместо того, чтобы хранить их в отдельных тегах VirtualHost, поместите их в один и тот же тег, например:

<VirtualHost  *:80>
   ProxyPass /geoserver http://localhost:8080/geoserver
   ProxyPassReverse /geoserver http://localhost:8080/geoserver
   ProxyPass /DocHub http://localhost:5000
   ProxyPassReverse /DocHub http://localhost:5000
</VirtualHost>

Мне кажется, это работает.