Django Nginx Gunicorn = 504 超时

Ped*_*des 7 python django nginx gunicorn

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

Tho*_*mas 6

当您按住 F5 时:

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

解决方案:

  • 在 Nginx 中设置限速桶,以 IP 为键,这样一个恶意用户就无法向您发送垃圾邮件请求和 DOS 您的站点。
  • 在 Nginx 中设置一个全局限速桶,这样你就不会填满你的请求队列。
  • 让 Nginx 提供一个不错的“Reddit 负载过重”风格的页面,让用户知道这是一个有目的的事件

或者:

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