2012-08-07 9 views
12

Ludzie, staramy się konfiguracji Apache reverse proxy dla następującego scenariusza:ProxyPassMatch z ProxyPassReverse

  • przychodzące żądania przybrać formę http://foo.com/APP/v1/main.html
  • Dla niektórych serwerach URL będzie odwoływać się do wersji różnica, powiedzmy, http://foo.com/APP/v2/main.html
  • Nadrzędny układ równoważenia obciążenia (HAProxy) wyśle ​​żądanie na właściwy serwer, który będzie miał odwrotny serwer proxy Apache2, obsługujący serwer JBoss.
  • Jeżeli wniosek pojawia się w Apache 2 będzie miał żądania trasy jak /APP/v1/main.html
  • chcemy, aby (wsteczny) pełnomocnika się http://localhost:8080/AppContext/main.html, niezależnie fragmentu wersji w adresie URL (v1, v2, etc.).

staram się zrobić to tak:

ProxyPassMatch ^/.*?/APP.*?/(.*)$ http://localhost:8080/AppContext/$1 
ProxyPassReverse /APP http://localhost:8080/AppContext 

moje pytania są następujące:

  1. Czy mój wykorzystanie ProxyPassMatch prawidłowe?
  2. Mój ProxyPassReverse jest "statyczny". Jak mogę poinformować o potencjalnie zmiennych rzeczach po /APP?

Dzięki za wszelkie spostrzeżenia.

-Raj

Odpowiedz

8

jesteś blisko, spróbuj zmienić regex trochę stanowią fragment Wersja:

ProxyPassMatch ^/.*?/APP.*?/v[0-9]+/(.*)$ http://localhost:8080/AppContext/$1 

ProxyPassReverse jest głównie do zapewnienia przepisywanie on-the-fly lokalizacji pola nagłówka w odpowiedziach podanych przez aplikację Proxy. Więc kiedy zwraca 301 przekierowanie na, powiedzmy, http://localhost:8080/AppContext/something, apache wie, aby zmienić go na /APP/v1/something, więc informacje za proxy nie zostaną ujawnione. Ponieważ masz dynamiczny adres URL używany w odwrotnym proxy, masz tu kilka możliwości. Możesz wysłać go do modułu równoważenia obciążenia HAProxy (nie wiesz, gdzie to jest dla ciebie), lub możesz wybrać jedną i mieć nadzieję na najlepsze. Na przykład, jeśli masz równoważenia obciążenia na /APP/balancer/ który następnie wysyła żądania do /APP/v1/, /APP/v2/, /APP/v3/ itp Następnie można to zrobić:

ProxyPassReverse /APP/balancer http://localhost:8080/AppContext 

W przeciwnym razie, można po prostu skierować go do jednego i nadziei na najlepiej:

ProxyPassReverse /APP/v1 http://localhost:8080/AppContext 
+0

Dziękuję Jonowi za szybką odpowiedź. Staramy się, aby nasza konfiguracja Apache była wolna od wpisów specyficznych dla wersji, aby mieć jednolity szablon, który można swobodnie wdrożyć w klastrze. Wygląda na to, że nie można w niezawodny sposób wykonać zadania ProxyPassReverse. Czy zaproponowałbyś wykonanie tego poprzez jakiś moduł do przepisywania? – Raj

+0

@Raj Rewrite nie pomoże, ponieważ jest w innym kierunku. Serwer aplikacji próbuje przekierować żądanie, nie wie nic o rzeczywistym adresie URL, który jest używany, aby uzyskać do niego dostęp, więc po prostu mówi: "Przejdź do http: // localhost: 8080/AppContext/coś", które przeglądarka zwróci błąd 404, ponieważ komputer, na którym działa przeglądarka, nie ma serwera aplikacji działającego na porcie 8080 lokalnego hosta lokalnego –

Powiązane problemy