У меня сервер 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>
Мне кажется, это работает.