I'm having a problem with getting additional virtual hosts to proxy correctly with Apache/Tomcat. Basically, I have a primary virtual site that is Proxy'd to Tomcat and that works fine. However, the additional virtual hosts that I setup don't work. They all reverse back to the primary site. This is the first time I've set this up so I'm obviously doing something [probably simple] that is causing the problem.
<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>
and here's the tomcat server.xml file
<!-- 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>
Best Answer
It's hard to guess based on just the config of one vhost, but a couple of likely causes:
Make sure your
<VirtualHost>
specifications match yourNameVirtualHost
directive.For example, you probably have
NameVirtualHost *:80
, so your new vhosts need to be set up as<VirtualHost *:80>
, with appropriateServerName
/ServerAlias
configs to get the requests to them.To make sure Tomcat has the info it needs to send to the different
appBase
for the different host names, you'll need to make sure thatProxyPreserveHost
is enabled for all of your sites.