Apache + Tomcat: использование прокси-сервера mod вместо AJP
есть ли способ подключить Apache к Tomcat с помощью HTTP-прокси, чтобы Tomcat получал правильное имя входящего хоста, а не localhost? Я использую эту директиву в apache:
ProxyPass /path http://localhost:8080/path
но он проходит как localhost, что бесполезно, когда у нас есть куча сайтов на одном сервере. Я мог бы установить хост вручную в конфигурации сервера:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
proxyName="pretend.host" proxyPort="80" />
но это снова не обслуживает более одного сайта. И мне не нравится идея использовать другой внутренний порт для каждого сайта, это звучит очень некрасиво.
нет ли способа передать порт, когда я его прокси-сервер?
(Если вы спросите, почему я не просто использую AJP, ответ будет ошибка. Я пробую все, что могу, прежде чем отказаться от Tomcat и Apache полностью)
3 ответов
настройки, которые вы ищете:
<VirtualHost *:80>
ServerName public.server.name
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
обратите внимание, что мы используем localhost в качестве прокси-мишени. Мы можем сделать это, так как мы включаем ProxyPreserveHost. В документации указано, что
это в основном полезно в специальных конфигурациях, таких как виртуальный хостинг на основе проксированных массовых имен, где исходный заголовок Хоста должен быть оценен бэкенд-сервером.
который звучит точно так же, как вы делающий.
Я думаю, что лучше всего, если вы хотите несколько сайтов на одном сервере, использовать виртуальные хосты в конфигурации Apache. Вот пример:
<VirtualHost *:80>
ServerName server.domain.com
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://server.domain.com:8080/
ProxyPassReverse / http://server.domain.com:8080/
<Location />
Order allow,deny
Allow from all
</Location>
покуда вы имеете server.domain.com зарегистрированное во внешнем DNS имя входящего хоста будет отображаться в URL-адресах клиентов. Я запускаю один сервер, на котором размещены 6 отдельных сайтов, включая 3, которые вернулись Tomcat, используя этот метод.
вы все еще можете использовать AJP, и вы должны, так как это быстрее, чем HTTP. Просто не забудьте включить его в http.conf:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
в этом случае эта конфигурация работает для меня:
<VirtualHost *:80>
ServerName public.server.name
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / ajp://localhost:8080/
# ProxyPassReverse might not be needed,
# it's only for redirecting from inside.
# ProxyPassReverse / ajp://localhost:8080/
</VirtualHost>