【问题标题】:Django Nginx Gunicorn = 504 TimeoutDjango Nginx Gunicorn = 504 超时
【发布时间】:2013-12-15 03:57:27
【问题描述】:

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

【问题讨论】:

    标签: python django nginx gunicorn


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

      当你按住 F5 时:

      • 您已经发起了数百个请求。
      • 这些请求已填满您的 gunicorn 请求队列。
      • 连接断开后,请求处理程序尚未被剔除。
      • 您的最新请求被卡在所有先前请求后面的队列中。
      • Nginx 超时。
      • 适合所有人。

      解决方案:

      • 在 Nginx 中设置速率限制存储桶,以 IP 为密钥,这样一个恶意用户就无法向您发送垃圾邮件请求并破坏您的网站。
      • 在 Nginx 中设置一个全局限速桶,这样您的请求队列就不会溢出。
      • 让 Nginx 提供一个漂亮的“Reddit is under high load”样式页面,让用户知道这是一个有目的的事件

      或者:

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

      【讨论】:

        猜你喜欢
        • 2018-09-20
        • 2015-12-24
        • 2011-10-04
        • 2017-03-28
        • 2020-12-25
        • 2011-04-02
        • 1970-01-01
        • 2016-06-19
        • 2018-05-17
        相关资源
        最近更新 更多