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ć?
źródło
ProxyPreserveHost On
tego jest prawie zawsze złe, bezużyteczne i prawie zawsze pękaProxyPassReverse
. Uwaga dodatkowaProxyRequests off
jest domyślna, dlatego jest redundantna.localhost
to nie działa.Wypróbuj tę konfigurację
Jeśli twoja aplikacja musi mieć dostęp do informacji SSL z połączenia proxy, powinieneś rozważyć użycie mod_proxy_ajp i łącznika tomcat ajp1.3.
źródło
Ale jeśli Twoim celem jest uruchomienie wielu aplikacji internetowych z obsługą SSL na tym samym serwerze. dodanie apache z przodu nie zrównoważy ich przy użyciu powyższej konfiguracji, nadal potrzebujesz modułu równoważenia obciążenia lub możesz użyć modułu równoważenia proxy apache z czymś takim:
źródło
Cóż, nie rozumiem tutaj, dlaczego musisz mieć połączenie SSL z apache do aplikacji, która wydaje się znajdować na tym samym komputerze ( http: // localhost: 8443 / ).
Sądzę, że zwykłym sposobem na skonfigurowanie takich rzeczy jest apache zapewniający szyfrowanie SSL po stronie klienta, np. Internet, i nieszyfrowane połączenie z aplikacją. Daje to również większą swobodę debugowania odpowiedzi aplikacji.
Inną rzeczą, o której wspomniał Dave Cheney, jest użycie natywnego złącza tomcat w celu uzyskania równoważenia obciążenia i innych funkcji.
źródło
Czy naprawdę potrzebujesz proxy do usługi HTTPS? Możesz chcieć proxy do usługi innej niż ssl w localhost, np
źródło
Najpierw sprawdzę, czy możesz wykonać żądanie z localhost do localhost: 8443 i zobacz, czy to się powiedzie (IE zrobi GET lub wget http: // localhost: 8443 )
Nie jestem do końca pewien, dlaczego Twój wirtualny host havin ga nasłuchuje na porcie 443, a następnie przekazuje go do innego hosta ssl
dlaczego nie mogę po prostu użyć natywnie 443? jeśli nie możesz tego zmienić, możesz po prostu użyć iptables do przekierowania portu
źródło
Sprawdź dziennik błędów SSL i upewnij się, że nie ma błędów związanych z niemożnością zweryfikowania łańcucha certyfikatów urzędu certyfikacji.
źródło