Ank*_*rma 13 python django nginx gunicorn django-rest-framework
在典型的 Python 服务器设置中,建议让 Nginx Web 服务器提供静态内容并将动态请求代理到 Gunicorn 应用服务器。现在,如果我不通过我的 python 应用程序提供任何静态内容,我还需要在 Gunicorn 前面使用 Nginx 吗?有什么好处?详细的解释将不胜感激。
所有静态内容都通过 CDN 提供,后端服务器只需要提供 API(REST)。所以当我只提供动态内容时,我需要 Nginx 吗?在高负载等情况下它有什么优势吗?
xyr*_*res 18
它是在Gunicorn文档建议运行它后面的代理服务器。
从技术上讲,您并不真正需要Nginx。
但它是互联网:您的服务器将收到大量由机器人和漏洞扫描程序脚本发出的格式错误的 HTTP 请求。现在,您的 Gunicorn 进程将忙于解析和处理这些请求,而不是为真正的客户提供服务。
在前面使用 Nginx 时,它将终止这些请求而不转发到您的 Gunicorn 后端。
这些机器人中的大多数都会向您的 IP 地址而不是您的域名发出请求。因此,将 Nginx 配置为忽略对 IP 地址的请求并仅提供对您的域的请求非常容易。这比依赖 Django 的ALLOWED_HOSTS
设置更安全、更快捷。
此外,为 Nginx 找到有关保护服务器的资源要容易得多,例如将流氓 IP 地址或用户代理列入黑名单等。比较这两个谷歌搜索:nginx ban ip与gunicorn ban ip。可以看到 Nginx 搜索有更多的资源。
如果您担心性能,那么请放心,Nginx 不会成为瓶颈。如果你真的想优化性能,数据库查询将是第一个开始的地方。
不,我不再专门为 python 应用程序部署 nginx。我的路径中可能有一个应用程序负载均衡器/nginx,用于将请求拆分到其他应用程序,但不用于负载管理。如果使用基于 asyncio 的系统,我通常甚至不使用应用程序服务器(uwsgi/gunicorn)。这包括具有非常高吞吐量的应用程序。每一层反向代理/第 7 层负载平衡都会增加一点延迟 - 如果不需要,请不要添加它。
归档时间: |
|
查看次数: |
2116 次 |
最近记录: |