configurar django apache nginx

django - configurar - python uwsgi



Http POST descarta puerto en URL (5)

Tengo una aplicación web desarrollada con Django. Actualmente estoy ejecutándolo en una computadora portátil en casa detrás de un enrutador.

Tengo el enrutador configurado para enrutar todo el tráfico enviado a un puerto específico a esa computadora portátil.

Tengo Nginx como proxy inverso para Apache, usando mod_wsgi para ejecutar Django.

Mi problema es este: cuando trato de enviar cualquier formulario POST, el número de puerto se elimina de la url (por ejemplo, 209.245.23.201:1552/login/ se convierte en 209.245.23.201/login/)

Naturalmente, esto se rompe. ¿Qué causa esto (Nginx, Apache, Django?) Y cómo puedo solucionarlo?

Gracias por adelantado.

EDITAR: Parece que los formularios se envían, pero creo que la redirección falla.

EDIT 2: El problema es definitivamente con Nginx o la interacción entre Nginx y Apache. Probé la configuración con Apache como el único servidor, ejecutando django, y funcionó bien. Entonces Nginx está abandonando el puerto, o de alguna manera Apache se está confundiendo por Nginx actuando como el proxy.whatever


Dado que todo lo que le preocupa es un HTTP claro (a diferencia de algo como AJP, por ejemplo), ejecutaba un analizador de protocolos como Wireshark en el host y determinaba en qué momento se introdujo el redireccionamiento.


Desea pasar el encabezado HTTP Host original, que llegó a nginx:

proxy_set_header Host $http_host;

Esto parece ser un error con la configuración predeterminada de nginx en Debian / Ubuntu, que usa solo $host : $host no contendrá $server_port . (Esto está configurado en /etc/nginx/proxy_params para el paquete Debian / Ubuntu, y puede anularlo en su configuración después de incluirlo).

Tenga en cuenta que $host:$server_port es diferente de $http_host . Consulte http://wiki.nginx.org/HttpCoreModule#.24host para obtener una explicación.

Reportado y reparado en Debian: http://bugs.debian.org/733016


Si encuentra que esto ocurre con una URL derivada del método get_absolute_url () de un modelo, debe usar pasar esa ruta a HttpRequest.build_absolute_url() para anteponer el nombre de host y el puerto a la ruta.


Verifica los registros de errores. En Linux mine están en / var / log / apache2. Simplemente ejecutar una búsqueda de error.log debería activarlo.


Tengo el mismo problema con mi servidor de desarrollo. Después de buscar en Internet, encontré esta discusión ( nginx, apache y error de administrador impar ) donde la solución es modificar la configuración del proxy de nginx.

La configuración de configuración para modificar es:

proxy_set_header Host $host;

la solución es agregar el número de puerto:

proxy_set_header Host $host:$server_port;

En mi ngnix + apache2 (con trabajador mpm) + django ahora todo funciona bien.