2011-11-15 8 views
15

Używam przepisania przerobić, aby zamaskować kontekstowy katalog główny mojej aplikacji. Na przykład,Czy muszę używać ProxyPassReverse, jeśli używam przepisywania mod?

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

appcluster wygląda następująco:

<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> 

Czy muszę korzystać ProxyPassReverse w ogóle? Użyłem go używać, bo mój stary kod webserver wyglądał następująco:

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

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

Odpowiedz

47

ProxyPassReverse służy do zmiany nagłówki wysyłane przez aplikację (appcluster) do Apache, Apache, zanim wyśle ​​go w przeglądarce. Na przykład, jeśli aplikacja znajduje się pod adresem http://localhost:9013/ i próbuje przekierować przeglądarkę na, powiedzmy, /new_location/, to odpowie z przekierowaniem i nagłówkiem lokalizacji http://localhost:9013/new_location/, a Apache weźmie to i wyśle ​​do przeglądarki. Problem polega na tym, że przeglądarka (zakładając, że jest gdzie indziej), następnie próbuje wysłać żądanie do http://localhost:9013/new_location/ i otrzymuje błąd.

Co robi ProxyPassReverse przechwytuje te nagłówki i przepisuje je tak, aby pasowały do ​​tego, jak wygląda serwer Apache, który wykonuje proxy. Więc jeśli mój serwer apache jest gospodarzem http://myhost.com/ i mam ProxyPass wskazujący / do http://localhost:9013/App, jeśli aplikacja siedzi na localhost: 9013 zwraca przekierowanie do http://localhost:9013/App/new_location/, będę musiał użyć ProxyPassReverse tak że zostaje przepisana do http://myhost.com/new_location/ przez Apache przed wysłanie żądania z powrotem do przeglądarki.

Jeśli nie wydajesz przekierowań, to nie będzie problemu, ale nie zaszkodzi mieć go na wypadek, gdyby zwrócono przekierowanie 301/302. Jeśli chodzi o mod_rewrite, RewriteRule dotyczy wniosku przechodzącego do aplikacji, a nie odpowiedzi z aplikacji. Są więc wzajemnie wykluczającymi się wydarzeniami.

+0

Czy mój operator proxy przejdzie w odwrotnym kierunku: ProxyPassReverse/App/directory http: // localhost: 9013/App/directory? –

+0

Myślę, że to, co masz, jest poprawne. Chociaż widziałem, jak ludzie używają go w taki sposób, że URL po prawej stronie jest domeną zewnętrzną, a nie hostem lokalnym. Moje wdrożenia Jboss używają ProxyPassReverse tak, jak to masz i przekierowują dobrze. –

+0

Bardzo ładne Wyjaśnienie dotyczące ProxyPassReverse i potrzeby. @jon Lin .. Dziękuję –

Powiązane problemy