У меня есть доступный в Интернете сервер apache, на котором включен и работает SSL. В локальной сети есть еще один сервер, который предоставляет приложение tomcat через http.
Сервер Apache выполняет обратные прокси-серверы для приложения Tomcat. Когда сервер apache используется через http, приложение tomcat правильно проксируется, но при его использовании через https сервер tomcat возвращает ресурс 404, который не найден. Значит, запрос https не переведен на http? Я бы предпочел сделать это, не касаясь конфигурации tomcat, поскольку это не моя область.
Это мой конфиг:
<VirtualHost *:443>
ServerName ext-service.example.com
SSLEngine on
SSLCertificateFile /etc/apache2/ssl.crt/mycert.crt
SSLCertificateKeyFile /etc/apache2/ssl.key/mykey.key
SSLCertificateChainFile /etc/apache2/ssl.crt/mybundle.crt
ProxyRequests Off
ProxyPreserveHost Off
<Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from all
</Proxy>
DocumentRoot /srv/www/empty/
ProxyPass / http://int-service.example.com/
ProxyPassReverse / http://int-service.example.com/
</VirtualHost>
Если tomcat настроен на использование AJP, я предлагаю вам использовать это.
ProxyPass / ajp://int-service.example.com:<ajp_port>/
ProxyPassReverse / ajp://int-service.example.com:<ajp_port>/
Вам придется адаптировать конфигурацию tomcat, обойти это невозможно. Ваша конфигурация apache пока выглядит нормально, только две вещи, которые не работают, когда я сравниваю ее с моей настройкой:
DocumentRoot
там бесполезен, вы можете удалить его, так как вы все проксируете.ProxyPreserveHost
должно быть On
С другой стороны, Tomcat нужно сообщить, что перед ним прокси-сервер и что он использует https вместо http.
Должен быть файл конфигурации, в котором указан коннектор.
<Connector port="80"
<!-- add these lines -->
scheme="https"
proxyName="ext-service.example.com"
proxyPort="443"
<!-- other options -->
/>
После добавления этих строк Tomcat знает, как должны создаваться URL-адреса.