Pomóż mi zrozumieć, jak korzystać z ProxyPass

11

AKTUALIZACJA: Dodałem poprawione pytanie po pobawieniu się dwiema odpowiedziami poniżej.

Cześć,

Jeśli to czytasz, prawdopodobnie znasz mod_proxy Apache i jego funkcję ProxyPass. Podobnie jak wiele innych, mam problem z aplikacją, do której mogę uzyskać dostęp spoza naszej wewnętrznej sieci, ale sama ta aplikacja uzyskuje dostęp do innych wewnętrznych aplikacji na różnych komputerach, a kiedy uzyskasz dostęp zdalny dzięki tej konfiguracji, sprawy stają się nieprzyjemne.

Więc moja konfiguracja jest bardzo prosta, mam:

Maszyna nr 1 ma włączony dostęp zdalny, uzyskuję do niej dostęp za pomocą nazwy hosta i wypluwa działającą na nim aplikację PHP.

Maszyna nr 2 to nowa aplikacja działająca pod Django, wykorzystuje ona zupełnie inny backend (nawet auth), jest hostowana na osobnej maszynie. W naszym intranecie uzyskujemy do niego dostęp za pomocą prostej nazwy hosta, która w zasadzie prowadzi do wewnętrznego adresu IP 192.168.0.101.

Próbowałem grać z ProxyPass, aby go skonfigurować, więc na przykład hasło do / new wyśle ​​go do nowej aplikacji:

ProxyPass / new http://192.168.0.101/

Ten rodzaj działa, dostaje żądanie do innej aplikacji, ale psuje się, ponieważ moja aplikacja Django chce przekierować na / auth / login /, którego natychmiast nie rozpoznaje. Jeśli sam zmienię adres URL na foo.net/new/auth/login, dostanę stronę logowania, ale jak można się domyślić, robienie tego podczas przeglądania nie jest wygodne.

Jak mogę sprawić, by ProxyPass działał tak, jak chcę? Czy muszę coś zrobić z Apache, aby zawsze zapisywał / nowy przed adresem URL w innej aplikacji, czy jest to coś, co powinienem zmodyfikować w mojej aplikacji Django?

Wszelkie wskazówki i wskazówki będą mile widziane. Dziękuję za Twój czas


źródło

Odpowiedzi:

11

Powinieneś zmodyfikować aplikację django, aby oczekiwała, że ​​będzie w / new / auth / login zamiast / auth / login. Ogólnie przepustki proxy powinny wyglądać tak:

ProxyPass /path http://192.168.0.101/path
ProxyPassReverse /path http://192.168.0.101/path

To w połączeniu z aplikacją Django, która spodziewa się, że będzie w / new / powinna rozwiązać problemy.

f4nt
źródło
2

Użyj VirtualHost. Na przykład ustaw nazwę A swojego serwera (np. Sub.external.com ) na adres IP swojego serwera (np. 123.456.678 )

Ze względów bezpieczeństwa musisz jawnie przesłać HTTP_HOST, jeśli używasz ProxyPass w settings.py , na Bilet # 6880 :

USE_X_FORWARDED_HOST = True

Następnie dodaj następujące elementy do Apache /etc/httpd/httpd.conf :

# Virtual hosts
Include /etc/httpd/extra/httpd-vhosts.conf

Dodaj swój VirtualHost do /etc/httpd/extra/httpd-vhosts.conf :

NameVirtualHosts *:80

<VirtualHost *:80>
  ServerName sub.external.com
  ProxyPass / http://127.0.0.1:8000/
</VirtualHost>

Teraz będziesz mieć dostęp do swojej witryny z http://sub.external.com bez martwienia się o „ścieżki”

Lionel
źródło
1

Dziękuję za odpowiedzi, odpowiadam na moje pytanie, ponieważ po zabawie potrzebuje kilku poprawek.

Po pierwsze, aplikacja nr 2 uruchamia się http://192.168.0.101 .. nie działa http://192.168.0.101/path, więc ProxyPass nie będzie działać

Więc po rozmowie z niektórymi facetami #apache z irc odkryłem, że muszę zrobić coś takiego:

RewriteCond% {HTTP_HOST} ^ app2.myremotedns.com *

RewriteRule. * Http://192.168.0.101/ [P]

W ten sposób wysyłana jest reguła przepisywania wszelkich żądań do app2.myremotedns.com, które mają zostać wysłane na wewnętrzny adres IP za pośrednictwem serwera proxy.

Działa to nieco, ale ma trzy problemy:

  • Po zalogowaniu na wszystkich stronach, jeśli uzyskuję dostęp do czegokolwiek zdalnie w app2, przekierowuje do / auth / login .. jednak z powodu bieżącej konfiguracji Rewrite dostaję pętlę przekierowania, zanim Firefox po prostu przestanie próbować ścieżki. Myślę, że to może mieć coś wspólnego z metodami przekierowywania Django, ale nie jestem do końca pewien.

  • Jeśli wyłączę logowanie, strony będą działać, ale nie w pełni. Wydaje mi się, że mogę pobrać stronę indeksu aplikacji nr 2, ale tak naprawdę nic więcej

  • Media statyczne są zepsute, ale prawdopodobnie jest to prosta poprawka .. nie martwię się o to teraz.

Mam więc bardziej złożony problem, niż sobie wyobrażałem ... :)


źródło
Użycie dowolnej konfiguracji django innej niż domyślna powoduje wiele problemów. Ostatnio trochę rozwiązałem inny problem z django i ProxyPass na moim blogu: fromzerotocodehero.blogspot.com/2011/01/…
1
Czy znalazłeś na to jakieś rozwiązanie? Mam dokładnie te same problemy, zwłaszcza z utratą stylów medialnych itp.
Membersound