Django Nginx Gunicorn = 504超时

时间:2013-11-29 02:40:21

标签: python django nginx gunicorn

我正在尝试使用Nginx + Gunicorn在生产服务器上发布Django应用程序。当我在服务器上进行简单的压力测试(按住F5键一分钟)时,服务器返回504 Gateway Time-out错误。为什么会这样?此错误仅在执行多个并发请求时显示给用户,否则系统将完全不可用于所有人?

2 个答案:

答案 0 :(得分:4)

按住F5:

  • 您已经开始了数百个请求。
  • 这些请求填满了你的枪支请求队列。
  • 一旦连接断开,请求处理程序就没有被剔除。
  • 您的最新请求被卡在所有先前请求后面的队列中。
  • Nginx超时。
  • 适合所有人。

解决方案:

  • 在Nginx中设置速率限制存储桶,以IP为基础,这样一个恶意用户就不会通过请求和DOS来垃圾邮件。
  • 在Nginx中设置全局速率限制存储桶,这样您就不会溢出请求队列。
  • 让Nginx服务一个不错的“Reddit负载很重”的样式页面,让用户知道这是一个有目的的事件

或者:

用uwsgi替换gunicorn。它更快,内存更高效,与nginx平滑集成,最重要的是:如果连接断开,它会立即终止请求处理程序,这样F5垃圾邮件就无法杀死你的服务器。

答案 1 :(得分:0)

https://medium.com/@paragsharma.py/504-gateway-timeout-django-gunicorn-nginx-4570deaf0922

504可能是由于gunicorn超时引起的,您需要以--timeout arg开头,例如

gunicorn --access-logfile - --workers 3 --timeout 300  --bind unix:/home/ubuntu/myproject/myproject.sock myproject.wsgi:application