Aiutami a capire come usare ProxyPass


11

AGGIORNAMENTO: Ho aggiunto una domanda rivista dopo averci giocato due risposte di seguito.

Ciao,

Se stai leggendo questo, probabilmente conosci il mod_proxy di Apache e la sua funzione ProxyPass. Come molti altri, ho il problema di avere un'applicazione a cui posso accedere dall'esterno della nostra rete interna, ma quell'applicazione stessa accede ad altre app interne su macchine diverse e quando si accede all'accesso remoto con questa configurazione, le cose vanno male.

Quindi, la mia configurazione è molto semplice, ho:

La macchina n. 1 ha l'accesso remoto abilitato, accedo tramite un nome host e sputa l'applicazione PHP in esecuzione su di essa.

Machine # 2 è una nuova applicazione che esegue Django, utilizza un backend completamente diverso (anche auth), è ospitato su una macchina separata. Nella nostra intranet, accediamo ad esso tramite un semplice nome host che fondamentalmente si collega all'ip 192.168.0.101 interno.

Ho provato a giocare con ProxyPass per configurarlo, ad esempio un passaggio a / new lo invierebbe alla nuova applicazione:

ProxyPass / nuovo http://192.168.0.101/

Questo tipo di funzionamento riceve la richiesta all'altra app, ma si interrompe perché la mia app Django desidera reindirizzare a / auth / login /, che non riconosce immediatamente. Se modifico l'URL da solo per essere foo.net/new/auth/login ottengo la mia pagina di accesso, ma come puoi immaginare farlo durante la navigazione non è conveniente.

Quindi, come posso fare in modo che ProxyPass funzioni come voglio? Devo fare qualcosa con Apache in modo che scriva sempre / nuovo prima dell'URL nell'altra app, o è qualcosa che dovrei modificare all'interno della mia app Django?

Eventuali suggerimenti e suggerimenti sarebbero anche molto apprezzati. Grazie per il tuo tempo

Risposte:


11

È necessario modificare l'applicazione django per aspettarsi di essere in / new / auth / login anziché in / auth / login. Generalmente i tuoi proxy pass dovrebbero apparire così:

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

Questo combinato con la tua app Django che prevede di essere in / new / dovrebbe risolvere i tuoi problemi.


2

Usa un VirtualHost. Ad esempio, imposta il nome A del tuo server (es. Sub.external.com ) sull'IP del tuo server (es. 123.456.678 )

Per motivi di sicurezza, è necessario inoltrare esplicitamente HTTP_HOST se si utilizza ProxyPass in settings.py , per Ticket # 6880 :

USE_X_FORWARDED_HOST = True

Quindi aggiungere quanto segue ad Apache /etc/httpd/httpd.conf :

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

Aggiungi il tuo VirtualHost a /etc/httpd/extra/httpd-vhosts.conf :

NameVirtualHosts *:80

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

Ora potrai accedere al tuo sito da http://sub.external.com senza doversi preoccupare di "percorsi"


1

Grazie per le tue risposte, sto rispondendo alla mia domanda in quanto ha bisogno di alcune revisioni dopo aver giocato con questo.

Prima di tutto, l'App # 2 funziona su http://192.168.0.101 .. non funziona su http://192.168.0.101/path in modo che ProxyPass non funzioni abbastanza

Quindi dopo aver parlato con alcuni ragazzi #apache di IRC, ho scoperto che devo fare qualcosa del genere:

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

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

Quello che fa è inviare una regola di riscrittura per qualsiasi richiesta a app2.myremotedns.com da inviare all'ip interno tramite proxy.

Funziona in qualche modo ma ha tre problemi:

  • Con l'accesso richiesto su tutte le pagine, se accedo a qualcosa in remoto su app2, reindirizza a / auth / login .. tuttavia, a causa dell'attuale configurazione di Riscrittura, ottengo un ciclo di reindirizzamento prima che Firefox smetta di provare il percorso. Immagino che questo possa avere qualcosa a che fare con i metodi di reindirizzamento di Django ma non ne sono del tutto sicuro.

  • Se disabilito il login, le pagine funzionano, ma non completamente. Mi sembra di essere in grado di recuperare la pagina dell'indice dell'App # 2, ma nient'altro in realtà

  • I media statici sono tutti rotti, ma questa è probabilmente una soluzione semplice ... non preoccuparti al momento.

Quindi, ho un problema più complesso di quanto immaginassi ... :)


L'uso di una configurazione django diversa da quella predefinita causa molti problemi. Recentemente ho risolto un altro problema con django e ProxyPass sul mio blog: fromzerotocodehero.blogspot.com/2011/01/…

1
Hai trovato una soluzione su questo? Ho esattamente gli stessi problemi, specialmente con la perdita di stili multimediali ecc.
Membersound,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.