Назад | Перейти на главную страницу

Обратный прокси-сервер Apache2 Tomcat с виртуальными хостами

У меня проблема с правильным подключением дополнительных виртуальных хостов к прокси с помощью 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>

Трудно предположить, основываясь только на конфигурации одного виртуального хоста, но есть несколько вероятных причин:

  • Убедитесь, что ваш <VirtualHost> спецификации соответствуют вашим NameVirtualHost директива.

    Например, у вас, вероятно, есть NameVirtualHost *:80, поэтому ваши новые хосты должны быть настроены как <VirtualHost *:80>, с соответствующими ServerName/ServerAlias конфиги, чтобы получать к ним запросы.

  • Чтобы убедиться, что у Tomcat есть информация, которую нужно отправить в разные appBase для разных имен хостов вам необходимо убедиться, что ProxyPreserveHost включен для всех ваших сайтов.