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

JkMount на основе FQDN для нескольких приложений

используя Apache HTTPD и Tomcats, мне приходится запускать два разных приложения с разными URL-адресами. 2 Tomcats обслуживают собственные приложения.

  1. www.abc.com

  2. www.xyz.com

My Worker.properties для этого

worker.list=tomcat1,status, tomcat2

# Define Tomcat1 for Application 1 accessed on www.abc.com
worker.tomcat1.port=8009 
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13 
worker.tomcat1.lbfactor=1

# Define Tomcat2 for Application 2 accessed on www.xyz.com
worker.tomcat2.port=8022
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
#

и мои виртуальные хосты и связанные с ними вещи в httpd.conf

<IfModule mod_jk.c>
    JkWorkersFile /etc/httpd/conf/workers.properties
    JkShmFile /var/log/httpd/mod_jk.shm
    JkLogFile /var/log/httpd/mod_jk.log
    JkLogLevel error
    JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
</IfModule>
<VirtualHost *:80>
    ServerName www.abc.com
    ErrorLog "/var/log/httpd/www.abc.com-error_log"
    CustomLog "/var/log/httpd/www.abc.com-access_log" common

    RewriteEngine On

      RewriteCond %{SERVER_PORT} !^443$
      RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L]

    JkMount /* tomcat1


</VirtualHost>

<VirtualHost *:443>

ServerName www.abc.com:443
ServerAlias abc
ErrorLog "/var/log/httpd/ssl-443-error_log"
CustomLog "/var/log/httpd/ssl-443-access_log" common
LogLevel error
    SSLEngine on
    SSLProtocol all -SSLv2

    SSLCertificateKeyFile /etc/httpd/conf/abc.key
    SSLCertificateFile /etc/httpd/conf/abc.crt
    SSLCertificateChainFile /etc/httpd/conf/abc-g2-g1.crt

    <Files ~ "\.(cgi|shtml|phtml|php3?)$">
        SSLOptions +StdEnvVars
    </Files>
    <Directory "/var/www/cgi-bin">
        SSLOptions +StdEnvVars
    </Directory>

SetEnvIf User-Agent ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

CustomLog logs/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

            RewriteCond %{SERVER_PORT} =443
            RewriteRule ^(.*)$ http://%{SERVER_NAME}:80$1 [R,L]

            JkMount /* tomcat1
</VirtualHost>                                  

############################################################################################
<VirtualHost *:80>
    ServerName www.xyz.com
    ErrorLog "/var/log/httpd/xyz.com-error_log"
    CustomLog "/var/log/httpd/xyz.com-access_log" common

         #  RewriteEngine On
         #  RewriteCond %{SERVER_PORT} !^9443$
         #  RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L]

   JkMount /* tomcat2

</VirtualHost>

конечно я добавил
NameVirtualHost *: 80 для работы с несколькими виртуальными хостами

он отправляет все запросы на первый хост [abc.com] для обоих URL-адресов www.abc.com www.xyz.com

для www.xyz.com мне нужно перейти на tomcat2, а не на tomcat1

Я обнаружил проблему, это были разные сертификаты SSL для обоих URL-адресов. Apache выполнял маршрутизацию на VirtualHost по умолчанию 0: 443 [первый].

Решение, которое я получил, - NameBasedSSLVHostsWithSNI.

Вы можете найти эту ссылку полезной