Я пытаюсь настроить сервер с несколькими веб-приложениями, которые будут обслуживаться через Apache VirtualHost (Apache работает на одном сервере). Моим главным ограничением является то, что каждое веб-приложение должно использовать шифрование SSL. Пройдя некоторое время, погуглив и посмотрев другие вопросы о стековом потоке, я написал следующую конфигурацию для VirtualHost:
<VirtualHost 1.2.3.4:443>
ServerName host.example.org
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / https://localhost:8443/
ProxyPassReverse / https://localhost:8443/
</VirtualHost>
Хотя https://host.example.org:8443 доступен, https://host.example.org нет, что противоречит цели моей конфигурации виртуального хоста. Firefox жалуется на то, что, хотя он успешно подключился к серверу, соединение было прервано. Я также получаю следующее предупреждение в apache error.log:
proxy: no HTTP 0.9 request (with no host line) on incoming request and preserve host set forcing hostname to be host.example.org for uri
В веб-приложении (сервер Tomcat) в журнале доступа отображается странный запрос доступа:
"?O^A^C / HTTP/1.1" 302
Ниже приведен правильный запрос доступа, который я получаю, когда подключаюсь напрямую к https://host.example.org:8443 :
"GET / HTTP/1.1" 302
Наконец, я должен также упомянуть, что виртуальный хост работает отлично, когда я не использую SSL.
Как я могу сделать эту работу?
ProxyPreserveHost On
это почти всегда неправильно, бесполезно и почти всегда ломаетсяProxyPassReverse
. Как примечание стороныProxyRequests off
по умолчанию, таким образом, излишним.