У меня есть "простой" вопрос, на который вы, вероятно, сможете ответить за секунды;) Я настраиваю веб-сервер apache (v2.2), этот сервер apache служит балансировщиком с включенным "mod_jk". На этом сервере размещены 2 разных приложения, которые называются «низкий» и «высокий». Я использую Tomcat-серверы V6.0x.
А вот и apache httpd.conf (аннотация):
# Load mod_jk module
LoadModule jk_module modules/mod_jk-1.2.30-httpd-2.2.3.so
# Where to find workers.properties
JkWorkersFile conf/workers.properties
# loadbalancer contains the first application that may be clustered (runs on more tomcat instances/servers)
JkMount /high/* loadbalancer
# webworker contains the second application that runs in a single tomcat instance
JkMount /low/* webworker
Как видите, существует два определенных сопоставления. Первый «высокий» идет на балансировщик нагрузки (2 сервера приложений «worker1» и «worker2», см. Worker.properties ниже). Второй принимает значение «низкий» и переходит к веб-работнику (просто еще один экземпляр tomcat на этом сервере).
А вот и worker.properties:
# Define worker list
worker.list=worker1,worker2,loadbalancer,webworker
# Set properties for worker1 (ajp13, http=8080, https=8443)
# Note: worker1 runs on the same machine as the serving apache webserver
worker.worker1.type=ajp13
worker.worker1.host=appserver1.example.com
worker.worker1.port=8009
worker.worker1.lbfactor=1
# Set properties for worker2 (ajp13, http=8080, https=8443)
# Note: worker2 runs on a different machine
worker.worker2.type=ajp13
worker.worker2.host=appserver2.example.com
worker.worker2.port=8010
worker.worker2.lbfactor=2
# Set properties for webworker (ajp13, http=9090, https=9443)
# Note: webworker runs on the same machine as the serving apache webserver
worker.webworker.type=ajp13
worker.webworker.host=appserver1.example.com
worker.webworker.port=8010
# Set properties for load balancer
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=worker1, worker2
Вот мой вопрос:
Как я могу настроить, чтобы все запросы для сопоставления "low" были переписаны на "https"? Второе приложение "low" должно быть запущено полностью защищенным.
то есть вызов "http://www.myapplication.com/low"заставляет сервер apache переписать это на"https://www.myapplication.com/low".
Возможно ли это с "mod_rewrite"? Где мне разместить файл сертификата? Должен ли сертификат быть настроен в tomcat-config (server.xml) или в apache-config (или, возможно, в обоих файлах config)?
Спасибо за вашу помощь :)
Нашел решение:
Бруно помог мне, так что это моя рабочая конфигурация (поместил конфигурацию в дополнительный файл с именем httpd-vhosts.conf):
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@example.com
ServerName appserver1.example.com:443
SSLEngine on
SSLCertificateFile "conf/ssl.crt/server.crt"
SSLCertificateKeyFile "conf/ssl.key/server.key"
JkMount /low/* webworker
</VirtualHost>
</IfModule>
<VirtualHost *:80>
ServerAdmin webmaster@example.com
ServerName appserver1.example.com
JkMount /high/* loadbalancer
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/low(.*) https://appserver1.example.com/low$1 [R,L]
</IfModule>
</VirtualHost>
Вы пробовали что-то подобное (при условии, что вы загрузили mod_rewrite)?
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/low(.*) https://%{SERVER_NAME}/low$1 [R,L]
Если вы используете Apache Httpd в качестве внешнего интерфейса, именно здесь необходимо настроить SSL (см. документация для модуля mod_ssl).
Обычно это будет выглядеть так:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@host.name.example
ServerName host.name.example
SSLEngine on
SSLCertificateFile /etc/ssl/certs/host.pem
SSLCertificateKeyFile /etc/ssl/private/host.key
# ...
# (the config file with your distribution will probably have
# a sensible set of options for SSL as well.)
JkMount /high/* loadbalancer
JkMount /low/* webworker
</VirtualHost>
</IfModule>
<VirtualHost *:80>
ServerAdmin webmaster@host.name.example
ServerName host.name.example
# You can put the rewrite rules here for example.
JkMount /high/* loadbalancer
# Don't put this one if you don't want it over plain HTTP
# JkMount /low/* webworker
</VirtualHost>