2012-07-27 26 views
5

Tengo un servidor Nginx/Gunicorn/Django desplegado en una máquina Centos 6 con solo el puerto SSL (443) visible para el mundo exterior. A menos que se llame al servidor con el https://, no obtendrá ninguna respuesta. Si lo llama con un http://domain:443, simplemente recibirá un mensaje de 400 Solicitud incorrecta. El puerto 443 es la única forma de acceder al servidor.Nginx/Django Admin POST https solo

Estoy usando Nginx para servir mis archivos estáticos (CSS, etc.) y todas las demás solicitudes son manejadas por Gunicorn, que está ejecutando Django en http://localhost:8000. Por lo tanto, navegar a https://domain.com funciona bien, al igual que los enlaces dentro del sitio de administración, pero cuando envío un formulario en el administrador de Django, el https se pierde en la redirección y me envía a http://domain.com/ request_uri que no llega al servidor. La acción POST funciona correctamente aun así y la base de datos se actualiza.

Mi archivo de configuración se enumera a continuación. La sección de ubicación location / es donde siento que debe encontrarse la solución. Pero no parece que las directivas proxy_set_header X-* tengan ningún efecto. ¿Me estoy perdiendo un módulo o algo? Estoy ejecutando nginx/1.0.15.

Todo lo que puedo encontrar en Internet apunta al X-Forwarded-Protocol https como debería hacer algo, pero no recibo ningún cambio. Tampoco puedo hacer que la depuración funcione en el servidor remoto, aunque mi siguiente paso puede ser que esté compilando localmente con la depuración habilitada para obtener más pistas. El último recurso es exponer el puerto 80 y redirigir todo ... pero eso requiere un poco de papeleo.

[Configurar argumentos http://pastebin.com/Rcg3p6vQ](My nginx)

server { 
    listen  443 ssl; 

    ssl on; 
    ssl_certificate /path/to/cert.crt; 
    ssl_certificate_key /path/to/key.key; 
    ssl_protocols  SSLv3 TLSv1 TLSv1.1 TLSv1.2; 
    ssl_ciphers   HIGH:!aNULL:!MD5; 

    server_name example.com; 

    root /home/gunicorn/project/app; 
    access_log /home/gunicorn/logs/access.log; 
    error_log /home/gunicorn/logs/error.log debug; 

    location /static/ { 
     autoindex on; 
     root /home/gunicorn; 
    } 

    location/{ 
     proxy_pass http://localhost:8000/; 
     proxy_redirect off; 
     proxy_set_header Host $host; 
     proxy_set_header X-Scheme $scheme; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Forwarded-Protocol https; 
    } 

} 

Respuesta

2

no han tenido tiempo todavía para entender exactamente lo que estas dos líneas hacen, pero la eliminación de ellos resuelto mis problemas:

proxy_redirect off; 
    proxy_set_header Host $host;