2008-10-09 16 views
11

Mój zespół próbuje ustawić proxy odwrotne Apache z witryny klienta w jednej z naszych aplikacji internetowych.Apache - komunikat zwrotny serwera proxy i komunikat HTTP 302

http://www.example.com/app1/some-path mapuje http://internal1.example.com/some-path

Wewnątrz naszej aplikacji używamy rozpórki i mieć przekierowanie = true zestaw na niektórych działań w celu zapewnienia pewnej funkcjonalności. Komunikaty o stanie 302 z tych przekierowań powodują, że użytkownik wyłamuje się z serwera proxy, co powoduje wyświetlenie strony błędu dla użytkownika końcowego.

HTTP/1.1 302 Found Lokalizacja: http://internal.example.com/some-path/redirect

Czy jest jakiś sposób na ustawienie odwrotne proxy w apache tak, że przekierowania działają prawidłowo?

http://www.example.com/app1/some-path/redirect

Odpowiedz

11

Istnieje artykuł zatytułowany Running a Reverse Proxy in Apache, który wydaje się rozwiązać twój problem. Używa nawet tego samego example.com i/app1, które masz w swoim przykładzie. Przejdź do sekcji "Konfigurowanie serwera proxy", aby zapoznać się z przykładami korzystania z ProxyPassReverse.

1

Użyj złącze AJP zamiast odwrotnej proxy. Z pewnością nie jest to drobna zmiana, ale odkryłem, że wiele koszmarów adresów URL znika, gdy używa się AJP zamiast odwrotnego proxy.

+0

Spędziłem 3 godziny próbując znaleźć niezawodny sposób, aby zapobiec przekierowaniom HTTP do przekazywania proxy https bez AJP. W końcu rozwiązałem to, używając ajp zamiast http w dyrektywach ProxyPass i ProxyPassReverse. – Gnafu

2

The AskApache article jest bardzo pomocny, ale w praktyce znalazłem połączenie Reguł Rewrite i ProxyPassReverse, aby być bardziej elastycznym. Tak więc w Twoim przypadku zrobiłbym coś takiego:

<VirtualHost example> 
     ServerName www.example.com 

     ProxyPassReverse /app1/some-path/ http://internal1.example.com/some-path/ 
     RewriteEngine On 
     RewriteRule /app1/(.*) http://internal1.example.com/some-path$1 [P] 

     ... 
    </VirtualHost> 

Lubię to lepiej, ponieważ daje lepszą kontrolę nad szczegółowymi drogami jesteś proxy dla serwera wewnętrznego. W naszym przypadku chcieliśmy ujawnić tylko część aplikacji innej firmy. Zauważ, że nie odnosi się to do zakodowanych w HTML-u linków, które obejmuje artykuł AskApache.

Należy również pamiętać, że można mieć wiele linii ProxyPassReverse:

ProxyPassReverse/http://internal1.example.com/some-path 
    ProxyPassReverse/http://internal2.example.com/some-path 

Wspominam o tym tylko dlatego, że inna aplikacja innej firmy byliśmy buforowania został wysyłanie przekierowań, które nie zawierają ich wewnętrzną nazwę hosta, po prostu inny port.

Jako ostatnia uwaga, należy pamiętać, że Firebug jest niezwykle przydatny podczas debugowania przekierowań.