2012-02-28 29 views
23

Moja aplikacja internetowa działa w Tomcat pod numerem http://localhost:8080/example.com/, ale jest ona odwracana z serwera Apache pod numerem http://example.com/ na porcie 80. Moja aplikacja internetowa sprawdza nagłówek request.getHeader("x-forwarded-host"), aby wiedzieć, że jest za odwrotnym proxy. Po wykryciu tego (dynamicznie) buduje adresy URL bez ścieżki serwletu.Jak poprawnie ustawić ścieżkę plików cookie JSESSIONID za odwrotnym proxy

Działa to dobrze dla wszystkiego oprócz plików cookie JSESSIONID. Jest ustawiany ze ścieżką /example.com zamiast /, gdy jest dostępny przez odwrotny serwer proxy. Nie wiem, w jaki sposób mogę kazać mojemu kodowi powiedzieć Tomcat, aby nadpisał ścieżkę do tego pliku cookie, gdy na żądanie jest nagłówek x-forwarded-host.

Próbowałem samodzielnie ustawić plik cookie JSESSIONID z poziomu aplikacji internetowej, ale to tylko dwa nagłówki Set-Cookie, z których tylko jeden jest poprawny.

Odpowiedz

30

Tomcat6 używa specyfikacji Servlet 2.3. Nie obsługuje zmiany ścieżki cookie za pomocą kodu lub konfiguracji Tomcat.

Mam go do pracy ze strony Apache z niektórymi dyrektywami mod_proxy. Dyrektywa ProxyPassReverseCookiePath robi dokładnie to, czego chcę. Odbiera plik cookie od Tomcat z niepoprawną ścieżką i przepisuje go na poprawną ścieżkę.

<VirtualHost *:*> 
    Servername example.com 
    ProxyRequests Off 
    ProxyPass/http://localhost:8080/example.com/ 
    ProxyPassReverseCookiePath /example.com/
    ProxyPassReverseCookieDomain localhost example.com 
</VirtualHost> 
Powiązane problemy