2011-12-21 23 views
7

Tengo un proyecto django configurado con nginx + apache. El puerto http para acceso externo es 20111 que luego se reenvía a la máquina servidor (que tiene una IP interna) al puerto 80. Entonces nginx escucha en el puerto 80 (y pasa las solicitudes pertinentes a apache en el puerto 5000).django admin redirige al puerto incorrecto al guardar

Ahora se puede acceder desde el exterior desde http://externalip:20111 - pero cuando completo una acción de administrador, como guardar una entrada, me redirigen al http://externalip/path/to/model - sin el puerto 20111. El resultado es un tiempo de espera. ¿Cómo puedo decirle a django que use un nombre de host/puerto específico (es decir, http://externalip:20111) para todos los redireccionamientos de administrador?

+0

Creo que su sitio (http: // ExternalIP: 20111/admin/sitios/site /) no lo hace tener el puerto en su campo de dominio. El dominio de su sitio parece ser "externalip" en lugar de "externalip: 20111". Es esto correcto ? – jpic

+0

No estoy usando el marco del sitio. ¿Estás diciendo que si lo habilito, automáticamente hará que el marco de administración use el Site.domain en todos los redireccionamientos? – pholz

+0

Bien, traté de usar el marco del sitio ahora, estoy incluyendo el puerto en el campo del dominio y configuré SITE_ID en la ID correcta, pero el administrador todavía me redirige a la URL base sin el puerto 20111. – pholz

Respuesta

3

Al implementar aplicaciones detrás de un proxy o balanceador de carga, es común confiar en el encabezado X-Forwarded-Host. Django tiene support para él

En primer lugar, debe configurar nginx para enviar los encabezados adecuados. Añadir a la configuración de las máquinas nginx (dentro de su sección location):

proxy_set_header X-Forwarded-Host $host:20111; 

En segundo lugar, añadir a su settings.py:

USE_X_FORWARDED_HOST = True 

Permitirá Django confiar X-Forwarded-Host cabeceras de la petición.

Debería hacerlo funcionar para usted. Por razones de seguridad, no se debe confiar en cada valor enviado en X-Forwarded-Host, así que añaden sus dominios de confianza/IP a ALLOWED_HOSTS en settings.py