繁体   English   中英

如果我不提供任何静态内容,我是否需要 Nginx 和 Gunicorn?

[英]Do I need Nginx with Gunicorn if I am not serving any static content?

在典型的 Python 服务器设置中,建议让 Nginx Web 服务器提供静态内容并将动态请求代理到 Gunicorn 应用服务器。 现在,如果我不通过我的 python 应用程序提供任何静态内容,我还需要在 Gunicorn 前面使用 Nginx 吗? 有什么好处? 详细的解释将不胜感激。

所有静态内容都通过 CDN 提供服务,后端服务器只需要提供 API(REST)。 所以当我只提供动态内容时,我需要 Nginx 吗? 在高负载等情况下它有什么优势吗?

Gunicorn 文档中建议在代理服务器后面运行它。

从技术上讲,您并不真正需要Nginx。

它是互联网:您的服务器将收到大量由机器人和漏洞扫描程序脚本发出的格式错误的 HTTP 请求。 现在,您的 Gunicorn 进程将忙于解析和处理这些请求,而不是为真正的客户提供服务。

使用前面的 Nginx,它将终止这些请求而不转发到您的 Gunicorn 后端。

这些机器人中的大多数都会向您的 IP 地址而不是您的域名发出请求。 因此,将 Nginx 配置为忽略对 IP 地址的请求并仅提供对您的域的请求非常容易。 这比依赖 Django 的ALLOWED_HOSTS设置更安全、更快。

此外,为 Nginx 找到有关保护服务器的资源要容易得多,例如将流氓 IP 地址或用户代理列入黑名单等。比较这两个谷歌搜索: nginx ban ipgunicorn ban ip 可以看到 Nginx 搜索有更多的资源。

如果您担心性能,那么请放心,Nginx 不会成为瓶颈。 如果你真的想优化性能,数据库查询将是第一个开始的地方。

不,我不再专门为 python 应用程序部署 nginx。 我的路径中可能有一个应用程序负载均衡器/nginx 来将请求拆分到其他应用程序,但不能用于负载管理。 如果使用基于 asyncio 的系统,我通常甚至不使用应用程序服务器 (uwsgi/gunicorn)。 这包括具有非常高吞吐量的应用程序。 每一层反向代理/第 7 层负载均衡都会增加一点延迟——如果你不需要就不要添加它。

即使您不使用 NGINX 为静态资产提供服务,建议将gunicorn代理服务器之后

例如,将gunicorn代理之后将允许向您的系统添加一些背压,以保护您免受诸如Slowloris 之类的攻击。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM