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

SSL-соединение с Tomcat (за Apache - mod_jk)

SSL-соединение работает для всех страниц на сервере Apache, кроме тех, которые обслуживаются Tomcat. Tomcat хорошо работает с http-соединением.

Настройка:

Что работает

Если я попытаюсь подключиться к tomcat через http, все будет в порядке. Каждая страница, указанная в директиве JkMount, пересылается Tomcat, а за все остальные страницы отвечает Apache. У меня два виртуальных хоста - один для порта 80 и один для 443. Рабочая конфигурация для 80:

<VirtualHost *:80>
ServerName *******

JkMount /cas ajp13_worker
JkMount /cas/* ajp13_worker

</VirtualHost>

В чем моя проблема

Когда я пытаюсь использовать https с аналогичной конфигурацией vhost для порта 443 - в журналах apache есть запись:

File does not exist: ****/apache2/htdocs/cas

Файлы конфигурации

Настройки для vhost на порту 443:

<VirtualHost ****:443>
ServerName *******

JkMount /cas ajp13_worker
JkMount /cas/* ajp13_worker

</VirtualHost>

В httpd.conf раздел для mod_jk:

JkWorkersFile ****/tomcat-7.0.23/conf/workers.properties
JkLogFile ****/apache2/logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

(I've read that I need the following lines ... )
JkExtractSSL On
JkHTTPSIndicator HTTPS
JkSESSIONIndicator SSL_SESSION_ID
JkCIPHERIndicator SSL_CIPHER
JkCERTSIndicator SSL_CLIENT_CERT

В httpd-ssl.conf я указал пути сертификатов ... https работает правильно для всех страниц, кроме страниц Tomcat.

DocumentRoot указан в httpd.conf.

Вопросы

Что контролирует, выполняет ли Apache поиск в каталоге DocumentRoot или перенаправляет запросы в Tomcat? Что я делаю не так?

Спасибо :)

Проверьте вывод apache2ctl -S - второй виртуальный хост SSL, который загружается первым на порт, будет получать запросы вместо желаемого виртуального хоста.

В DocumentRoot из httpd.conf отвечает только за глобальные настройки Apache. Если вы установите на своем сервере VirtualHostконфигурации он не должен мешать работе вашего VH.

Я бы порекомендовал пока увеличить вашLogLevelи после этого проверьте файл журнала. Кроме того, если его еще нет на продуктивном сервере, вы можете удалить DocumentRoot строки также в httpd.conf.

Я не использовал mod_jk в течение очень долгого времени, так как сама конфигурация казалась мне не очень забавной. Я переключился на mod_proxy для такого рода обратного проксирования, поскольку он более интуитивно понятен. В случае Tomcat я использую mod_proxy_ajp и заключите элементы в <IfModule mod_proxy_ajp.c> контейнер. Но это может быть личный привкус. Если вы не можете понять почему, попробуйте сэкономить время.

Что контролирует, выполняет ли Apache поиск в каталоге DocumentRoot или перенаправляет запросы в Tomcat?

Два фактора: порядок и определение <Directory> и соответствующие директивы, а также JKMount место (а).

Мне любопытно, почему вы думаете, что вам нужны два - просто используйте / cas / * (apache перенаправит запрос для / cas на / cas / автоматически, если / cas не существует, на основе параметра DirectorySlash, который по умолчанию включен)