Ayúdame a entender cómo usar ProxyPass

11

ACTUALIZACIÓN: agregué una pregunta revisada después de jugar con las dos respuestas a continuación.

Hola,

Si está leyendo esto, probablemente esté familiarizado con el mod_proxy de Apache y su función ProxyPass. Al igual que muchos otros, tengo el problema de tener una aplicación a la que puedo acceder desde fuera de nuestra red interna, pero esa aplicación en sí misma accede a otras aplicaciones internas en diferentes máquinas, y cuando ingresas al acceso remoto con esta configuración, las cosas se ponen difíciles.

Entonces, mi configuración es muy simple, tengo:

La máquina # 1 tiene acceso remoto habilitado, accedo a través de un nombre de host y escupe la aplicación PHP que se ejecuta en él.

Machine # 2 es una nueva aplicación que ejecuta Django, utiliza un backend completamente diferente (incluso auth), está alojado en una máquina separada. En nuestra intranet, accedemos a través de un simple nombre de host con nombre que básicamente se vincula a la ip interna 192.168.0.101.

Intenté jugar con ProxyPass para configurarlo, por ejemplo, un pase a / new lo enviaría a la nueva aplicación:

ProxyPass / nuevo http://192.168.0.101/

Este tipo de trabajo funciona, recibe la solicitud a la otra aplicación, pero se rompe porque mi aplicación Django quiere redirigir a / auth / login /, que instantáneamente no reconoce. Si yo mismo modifico la url para que sea foo.net/new/auth/login, obtengo mi página de inicio de sesión, pero como pueden adivinar, hacer esto durante la navegación no es conveniente.

Entonces, ¿cómo puedo hacer que ProxyPass funcione como quiero? ¿Debo hacer algo con Apache para que siempre escriba / new antes de las URL en la otra aplicación, o es algo que debería modificar dentro de mi aplicación Django?

Cualquier sugerencia y punteros también serán muy apreciados. Gracias por tu tiempo


fuente

Respuestas:

11

Debe modificar su aplicación django para esperar que esté en / new / auth / login en lugar de / auth / login. En general, sus pases proxy deberían verse así:

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

Eso, combinado con su aplicación Django que espera estar en / new / debería solucionar sus problemas.

f4nt
fuente
2

Use un VirtualHost. Por ejemplo, establezca el nombre A de su servidor (por ejemplo, sub.external.com ) en la IP de su servidor (por ejemplo, 123.456.678 )

Debido a la seguridad, debe reenviar explícitamente HTTP_HOST si usa ProxyPass en settings.py , según el Ticket # 6880 :

USE_X_FORWARDED_HOST = True

Luego agregue lo siguiente a Apache /etc/httpd/httpd.conf :

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

Agregue su VirtualHost a /etc/httpd/extra/httpd-vhosts.conf :

NameVirtualHosts *:80

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

Ahora, podrá acceder a su sitio desde http://sub.external.com sin tener que preocuparse por las "rutas"

Lionel
fuente
1

Gracias por sus respuestas, estoy respondiendo mi propia pregunta, ya que necesita algunas revisiones después de jugar con esto.

En primer lugar, la aplicación # 2 se ejecuta http://192.168.0.101 .. no se ejecuta http://192.168.0.101/path para que ProxyPass no funcione

Entonces, después de hablar con algunos chicos #apache de irc, descubrí que necesito hacer algo como esto:

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

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

Lo que esto hace es enviar una regla de reescritura para cualquier solicitud a app2.myremotedns.com para que se envíe a la IP interna a través de proxy.

Esto funciona un poco pero tiene tres problemas:

  • Con el inicio de sesión requerido en todas las páginas, si accedo a algo de forma remota en app2, redirige a / auth / login ... sin embargo, debido a la configuración actual de Rewrite, obtengo un bucle de redireccionamiento antes de que Firefox simplemente deje de probar la ruta. Supongo que esto podría tener algo que ver con los métodos de redireccionamiento de Django, pero no estoy muy seguro.

  • Si desactivo el inicio de sesión, las páginas funcionan, pero no del todo. Parece que puedo obtener la página de índice de la aplicación n. ° 2, pero nada más en realidad

  • Los medios estáticos están rotos, pero esta es probablemente una solución simple ... no estoy preocupado por eso en este momento.

Entonces, tengo un problema más complejo de lo que imaginé ... :)


fuente
Usar cualquier configuración de django diferente a la predeterminada causa muchos problemas. Recientemente resolví otro problema con django y ProxyPass en mi blog: fromzerotocodehero.blogspot.com/2011/01/…
1
¿Encontraste alguna solución en esto? Tengo exactamente los mismos problemas, especialmente con la pérdida de estilos de medios, etc.
membersound