2011-09-13 208 views
20

Tenemos algunas configuraciones de Django que pasan por un proxy (Apache y Nginx) que eventualmente llega al tiempo de ejecución real de Django.Ejecutando gunicorn en https?

Necesitamos tener HTTPS de extremo a extremo, incluso una vez que está en nuestra red. Hemos estado revisando Gunicorn debido a su éxito y rendimiento en nuestras otras configuraciones, pero necesitábamos probar con HTTPS de extremo a extremo para ser consistentes.

Nuestra topología es como tal:

https://foo.com -> [Proxy del lado público] -> (https) -> [servidor interno https://192...:8001]

¿Cómo se puede configurar Gunicorn para que escuche en HTTPS con un auto firmado ¿certificado?

Respuesta

10

Respuesta tardía masiva, pero para cualquier otra persona que encuentre esto, hay otra opción que usa nginx como "[proxy público]" arriba.

Configure nginx para manejar el tráfico SSL entrante en el puerto 443, y luego proxy_pass a gunicornio en un puerto interno. El tráfico externo está encriptado, y el tráfico entre nginx y gunicorn no está expuesto de todos modos. Encuentro esto muy simple de administrar.

+0

¿Cómo sabe que no está expuesto? –

+1

Porque enlaza a gunicornio con 127.0.0.1, de modo que solo localhost puede acceder a él – mafrosis

48

Gunicorn ahora es compatible con SSL, as of version 17.0. Se puede configurar para que escuche al https como este:

$ gunicorn --certfile=server.crt --keyfile=server.key test:app 

Si estaba utilizando --bind para escuchar en el puerto 80, recuerda cambiar el puerto a 443 (el puerto predeterminado para las conexiones HTTPS). Por ejemplo:

$ gunicorn --certfile=server.crt --keyfile=server.key --bind 0.0.0.0:443 test:app 
+1

¿Puede indicarme los documentos relevantes de cómo hacerlo? Estoy implementando en heroku, así que no estoy seguro de mi "servidor.crt", por ejemplo. –

+1

@DrewV Si está implementando en heroku no es necesario que admita SSL usted mismo - heroku lo hace por usted. Consulte [sus documentos] (https://devcenter.heroku.com/articles/ssl- endpoint) para obtener ayuda. Tendrá que configurar gunicorn para honrar la configuración de encabezado seguro de heroku. Utilizo algo como esto en mi fichero de configuración: 'forwarded_allow_ips = '*'' ' y secure_scheme_headers = { 'X-FORWARDED-PROTO': 'https',' – GregM

+0

} ¿Cuál es la 'prueba: app' parte del final? – Mikeumus