используя Apache HTTPD и Tomcats, мне приходится запускать два разных приложения с разными URL-адресами. 2 Tomcats обслуживают собственные приложения.
www.abc.com
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.