2012-02-28 19 views
23

Ứng dụng web của tôi đang chạy trên Tomcat tại http://localhost:8080/example.com/ nhưng đang được đảo ngược proxy từ Apache đang phục vụ http://example.com/ trên cổng 80. Ứng dụng web của tôi xem tiêu đề request.getHeader("x-forwarded-host") để biết nó nằm sau một proxy ngược. Khi nó phát hiện điều này (động) nó xây dựng các URL mà không có đường dẫn servlet trên chúng.Cách đặt đúng đường dẫn cookie JSESSIONID đằng sau proxy ngược

Tính năng này phù hợp với mọi thứ ngoại trừ cookie JSESSIONID. Nó được thiết lập với một đường dẫn của /example.com thay vì / khi nó được truy cập thông qua proxy ngược lại. Tôi không thể hiểu làm thế nào tôi có thể có mã của tôi nói với Tomcat để ghi đè lên đường dẫn cho cookie đó khi có một tiêu đề x-forwarded-host theo yêu cầu.

Tôi đã thử tự cài đặt cookie JSESSIONID từ ứng dụng web, nhưng điều đó chỉ dẫn đến hai tiêu đề Set-Cookie, chỉ một trong số đó là chính xác.

Trả lời

30

Tomcat6 sử dụng đặc tả Servlet 2.3. Nó không hỗ trợ thay đổi đường dẫn cookie thông qua mã hoặc cấu hình Tomcat.

Tôi nhận nó hoạt động từ phía Apache với một số chỉ thị mod_proxy. Chỉ thị ProxyPassReverseCookiePath thực hiện chính xác những gì tôi muốn. Nó lấy cookie từ Tomcat với đường dẫn không đúng và viết lại nó vào đường dẫn chính xác.

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