log error debug python flask gunicorn werkzeug

python - debug - gunicorn error log



tiempo de espera de aplicaciĆ³n de matraz con balanceador de carga de amazon (4)

Intento usar una aplicación Flask detrás de un Amazon Load Balancer y los hilos Flask mantienen el tiempo de espera agotado. Parece que el equilibrador de carga está enviando un encabezado Connection: keep-alive y esto está causando que el proceso del Frasco nunca vuelva (o tarda mucho tiempo). Con el gunicornio al frente, los procesos son asesinados y otros nuevos comienzan. También probamos usar uWSGI y simplemente exponer la aplicación Flask directamente (sin envoltorio). Todo da como resultado que el proceso del Frasco simplemente no responda.

No veo nada en los documentos del Frasco que lo haría ignorar este encabezado. No sé qué más puedo hacer con Flask para solucionar el problema.

Las conexiones rizadas y directas a la máquina funcionan bien, solo aquellas a través del equilibrador de carga están causando el problema. El equilibrador de carga en sí no parece estar haciendo nada mal y lo usamos con éxito con varias otras pilas.


La forma más fácil es forzar todas las conexiones para asegurarse de que está utilizando HTTP/1.0 y no agrega el encabezado Connection: Keep-Alive a la respuesta.

Por favor, compruebe werkzeug.http.remove_hop_by_hop_headers() .


¿Necesita un equilibrador de carga HTTP? Usar un balanceador de capa 4 también podría resolver su problema, ya que no interfiere con niveles de protocolo más altos.


¿Recordó establecer session.permanent = True y app.permanent_session_lifetime ?


La solución que tengo ahora es usar gunicornio como envoltorio alrededor de la aplicación del matraz. Para el worker_class estoy usando eventlet con varios trabajadores. Esta combinación parece estable y receptiva. Gunicorn también está configurado para HTTPS.

Supongo que es un defecto en Flask que causa el problema y esta es una solución efectiva.