У меня проблема с конфигурацией Apache и Tomcat. У меня есть экземпляр Apache в качестве прокси для Tomcat. Tomcat обслуживает два виртуальных хоста. Проблема возникает, когда одна виртуальная машина Apache указывает на конкретную виртуальную машину в Tomcat. Я могу показать в своих файлах конфигурации:
/ etc / hosts:
127.0.0.1 localhost
127.0.0.1 my-pages
/etc/apache/sites-enabled/my-pages.tld:
<VirtualHost *:80>
RewriteEngine on
ServerAdmin webmaster@my-pages.tld
ServerName www.my-pages.tld
ServerAlias my-pages.tld
ProxyPass / http://my-pages:9082/
ProxyPassReverse / http://my-pages:9082/
# Logs
ErrorLog /usr/local/tomcat2/logs/error.log
CustomLog /usr/local/tomcat2/logs/access.log common
LogLevel debug
</VirtualHost>
<Proxy *>
Order deny,allow
Allow from all
Deny from all
</Proxy>
ProxyRequests Off
ProxyPreserveHost Off
$ {CATALINA_HOME} /conf/server.xml
...
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8444"
URIEncoding="UTF-8" />
<Connector port="9082" proxyPort="80" proxyName="my-pages" />
...
<Host name="my-pages" appBase="my-pages"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="envelon-web" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="my-pages_access_" suffix=".log" pattern="common" resolveHosts="false"/>
</Host>
Когда я запускаю эту конфигурацию, страницы www.my-pages.tld указывают на виртуальный хост по умолчанию в Tomcat (а не на виртуальный «my-pages»). Это довольно странно, потому что, когда я устанавливаю такую же конфигурацию на моем локальном компьютере (не на сервере), она работает нормально. Также, когда я использую доменное имя в виртуальном Tomcat (my-pages.tld вместо my-pages), оно также работает (я не хочу использовать эту конфигурацию, потому что я хочу «скрыть» Tomcat извне).
Вы знаете, где я ошибаюсь или что решит эту проблему? Спасибо за любой ответ!
Матео
Я наконец решил эту проблему. Проблема заключалась в том, что ProxyPreserveHost был определен вне директива. В Apache было определено больше виртуальных хостов, и некоторые из них имели * ProxyPreserveHost On ", что повлияло на другие хосты.
я переехал ProxyPreserveHost в что решило
Вообще говоря, есть два решения:
mod_proxy_http
mod_proxy_ajp
Любой из них отлично работает для виртуальных хостов, и выбор зависит от предпочтений или других требований, помимо того, что было здесь задано.