2011-11-15 30 views
15

Tôi đang sử dụng mod viết lại để che dấu bối cảnh gốc của ứng dụng của tôi. Ví dụ,Tôi có cần sử dụng ProxyPassReverse nếu tôi đang sử dụng viết lại mod không?

RewriteRule ^/directory/(.*) balancer://appcluster/directory/$1 [P] 

Các appcluster trông như thế này:

<Proxy balancer://appcluster> 
BalancerMember http://localhost:8080/App route=app_01 keepalive=On loadfactor=1 ttl=300 min=3 smax=5 max=15 

ProxySet lbmethod=byrequests stickysession=JSESSIONID|jsessionid timeout=120 nofailover=On 
</Proxy> 

Tôi có cần phải sử dụng ProxyPassReverse ở tất cả? Tôi sử dụng để sử dụng nó bởi vì mã máy chủ web cũ của tôi trông như thế này:

ProxyPass /App balancer://appcluster lbmethod=byrequests stickysession=JSESSIONID|jsessionid timeout=120 nofailover=On 

ProxyPassReverse /App http://localhost:9013/App 

Trả lời

47

Các ProxyPassReverse được sử dụng để thay đổi các tiêu đề được gửi bởi ứng dụng (appcluster) để Apache, trước khi Apache gửi nó trình duyệt. Ví dụ: nếu ứng dụng nằm ở số http://localhost:9013/ và ứng dụng sẽ cố gắng chuyển hướng trình duyệt đến, theo số /new_location/, thì ứng dụng sẽ phản hồi với chuyển hướng và tiêu đề vị trí là http://localhost:9013/new_location/ và Apache sẽ thực hiện việc này và gửi nó tới trình duyệt. Vấn đề là, trình duyệt (giả sử nó ở một nơi khác) sau đó cố gửi yêu cầu đến http://localhost:9013/new_location/ và gặp lỗi.

Những gì ProxyPassReverse thực hiện là chặn các tiêu đề đó và ghi lại chúng để chúng khớp với những gì máy chủ Apache đang thực hiện proxy. Vì vậy, nếu máy chủ apache của tôi là lưu trữ http://myhost.com/ và tôi có một ProxyPass trỏ / để http://localhost:9013/App, nếu ứng dụng ngồi ở localhost: 9013 trả về chuyển hướng để http://localhost:9013/App/new_location/, tôi sẽ cần phải sử dụng ProxyPassReverse để nó được viết lại để http://myhost.com/new_location/ bởi Apache trước gửi yêu cầu trở lại trình duyệt.

Nếu bạn không phát hành chuyển hướng, nó sẽ không phải là vấn đề, nhưng nó không đau khi có nó trong trường hợp chuyển hướng 301/302 được trả lại. Theo như mod_rewrite, RewriteRule áp dụng cho yêu cầu đi tới Ứng dụng và không phải là phản hồi đến từ Ứng dụng. Vì vậy, họ là những sự kiện loại trừ lẫn nhau.

+0

Vì vậy, proxy của tôi sẽ bị đảo ngược như sau: ProxyPassReverse/App/directory http: // localhost: 9013/App/directory? –

+0

Tôi nghĩ rằng những gì bạn có là chính xác. Mặc dù tôi đã thấy mọi người sử dụng nó theo cách mà url ở bên phải là miền bên ngoài và không phải localhost. Triển khai Jboss của tôi sử dụng ProxyPassReverse giống như bạn có nó và họ chuyển hướng tốt. –

+0

Giải thích rất hay về ProxyPassReverse và sự cần thiết cho nó. @jon lin .. Cảm ơn bạn –

Các vấn đề liên quan