2012-02-28 132 views
23

我的web應用程序在Tomcat上運行的http://localhost:8080/example.com/,但它正在從反向代理的Apache是​​在端口80上我的web應用程序着眼於request.getHeader("x-forwarded-host")頭要知道,服務了http://example.com/它背後是一個反向代理。當它(動態地)檢測到它時,它會建立沒有servlet路徑的URL。背後反向代理如何正確設置JSESSIONID cookie路徑

這適用於除JSESSIONID cookie之外的所有內容。當通過反向代理訪問時,它的路徑設置爲/example.com而不是/。我無法弄清楚當請求上有一個x-forwarded-host標頭時,我可以讓我的代碼告訴Tomcat覆蓋該cookie的路徑。

我已經嘗試從Web應用程序本身設置JSESSIONID cookie,但這隻會導致兩個Set-Cookie標頭,其中只有一個是正確的。

回答

30

Tomcat6使用Servlet 2.3規範。它不支持通過代碼或Tomcat配置來更改Cookie路徑。

我把它從Apache的一邊用一些mod_proxy指令工作。指令ProxyPassReverseCookiePath正是我想要的。它將來自Tomcat的Cookie與不正確的路徑相重疊,並將其重寫爲正確的路徑。

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