Próbuję skonfigurować serwer z wieloma aplikacjami internetowymi, które będą obsługiwane przez apache VirtualHost (apache działający na tym samym serwerze). Moim głównym ograniczeniem jest to, że każda aplikacja internetowa musi korzystać z szyfrowania SSL. Po dłuższym przeglądaniu i przejrzeniu innych pytań dotyczących przepływu stosów napisałem następującą konfigurację dla 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>
Mimo że https://host.example.org:8443 jest dostępny, https://host.example.org nie jest dostępny, co przeczy celowi mojej konfiguracji wirtualnego hosta. Firefox skarży się, że mimo pomyślnego połączenia z serwerem połączenie zostało przerwane. Otrzymuję również następujące ostrzeżenie w pliku error.log apache:
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
W aplikacji internetowej (serwer Tomcat) dziennik dostępu pokazuje dziwne żądanie dostępu:
"?O^A^C / HTTP/1.1" 302
Poniżej przedstawiono poprawne żądanie dostępu, które otrzymuję, gdy łączę się bezpośrednio z https://host.example.org:8443 :
"GET / HTTP/1.1" 302
Na koniec powinienem również wspomnieć, że wirtualny host działa doskonale, gdy nie używam protokołu SSL.
Jak mogę to zrobić?
ProxyPreserveHost On
tego jest prawie zawsze złe, bezużyteczne i prawie zawsze pękaProxyPassReverse
. Uwaga dodatkowaProxyRequests off
jest domyślna, dlatego jest redundantna.