我正在尝试使用 Nginx + Gunicorn 在生产服务器上发布 Django 应用程序。当我在服务器上进行简单的压力测试时(按住 F5 键一分钟),服务器返回了一个 504 Gateway Time-out
错误。为什么会这样?这个错误只有在用户做多个并发请求时才会出现,否则系统将对所有人完全不可用?
最佳答案
当您按住 F5 时:
- 您已经发起了数百个请求。
- 这些请求已填满您的 gunicorn 请求队列。
- 请求处理程序不会在连接断开后立即被剔除。
- 您最新的请求排在所有之前请求的队列中。
- Nginx 超时。
- 对每个人。
解决方案:
- 在 Nginx 中设置速率限制桶,以 IP 为键,这样恶意用户就无法向您发送垃圾邮件请求和 DOS 您的网站。
- 在 Nginx 中设置一个全局速率限制桶,这样您就不会填满您的请求队列。
- 让 Nginx 提供一个漂亮的“Reddit 负载过重”风格的页面,让用户知道这是一个有目的的事件
或者:
用 uwsgi 替换 gunicorn。它速度更快,内存效率更高,与 nginx 顺利集成,最重要的是:如果连接断开,它将立即终止请求处理程序,这样 F5 垃圾邮件就无法终止您的服务器。
关于python - Django Nginx Gunicorn = 504 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20277537/