我在使用Apache / Tomcat正确代理其他虚拟主机时遇到了问题。 基本上,我有一个主要的虚拟网站,代理到Tomcat,并正常工作。 但是,我安装的其他虚拟主机不起作用。 他们都转回到主站点。 这是我第一次设置这个,所以我显然正在做一些可能导致问题的事情。
<VirtualHost *:80> ServerAdmin webmaster@secondary_domain.com ServerName secondary_domain.com ServerAlias www.secondary_domain.com ProxyPreserveHost On ProxyPass / ajp://localhost:8009/ ProxyPassReverse / ajp://localhost:8009/ DocumentRoot /var/www/secondary_domain.com DirectoryIndex index.jsp <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/secondary_domain.com/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ErrorLog /var/www/secondary_domain.com/logs/error.log LogLevel warn CustomLog /var/www/secondary_domain.com/logs/access.log combined <IfModule mpm_itk_module> AssignUserId user userg </IfModule>
这里是tomcat server.xml文件
<!-- Define an AJP 1.3 Connector on port 8009 --> <Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" /> <!-- Define a Proxied HTTP/1.1 Connector on port 8082 --> <!-- See proxy documentation for more information about using this. --> <!-- <Connector port="8082" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" acceptCount="100" connectionTimeout="20000" proxyPort="80" disableUploadTimeout="true" /> --> <!-- An Engine represents the entry point (within Catalina) that processes every request. The Engine implementation for Tomcat stand alone analyzes the HTTP headers included with the request, and passes them on to the appropriate Host (virtual host). --> <!-- You should set jvmRoute to support load-balancing via AJP ie : <Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1"> --> <!-- Define the top level container in our container hierarchy --> <Engine name="Catalina" defaultHost="localhost"> <Host name="primary_domain.com" appBase="/var/www/primary_domain.com"/> <Host name="secondary_domain.com" appBase="/var/www/secondary_domain.com"> <alias>www.secondary_domain.com</alias> </Host>
根据一个虚拟主机的configuration很难猜测,但有几个可能的原因:
确保您的<VirtualHost>规范与您的NameVirtualHost指令相匹配。
例如,您可能具有NameVirtualHost *:80 ,因此您的新虚拟主机需要设置为<VirtualHost *:80> ,并具有适当的ServerName / ServerAliasconfiguration以获取对它们的请求。
为了确保Tomcat具有需要发送到不同主机名的不同appBase的信息,您需要确保已为所有站点启用了ProxyPreserveHost 。