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, который по умолчанию включен)