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

标签 python django nginx django-rest-framework gunicorn

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

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

最佳答案

不,你真的不需要 Nginx。
但是 这是互联网:您的服务器将收到大量由机器人和漏洞扫描程序脚本发出的格式错误的 HTTP 请求。现在,您的 Gunicorn 进程将忙于解析和处理这些请求,而不是为真正的客户提供服务。
使用前面的 Nginx,它将终止这些请求而不转发到您的 Gunicorn 后端。
这些机器人中的大多数都会向您的 IP 地址而不是您的域名发出请求。因此,将 Nginx 配置为忽略对 IP 地址的请求并仅提供对您的域的请求非常容易。这比依赖 Django 的 ALLOWED_HOSTS 安全和快捷得多。设置。
此外,为 Nginx 找到有关保护服务器的资源要容易得多,例如将流氓 IP 地址或用户代理列入黑名单等。比较这两个谷歌搜索:nginx ban ip对比 gunicorn ban ip .可以看到 Nginx 搜索有更多的资源。
如果您担心性能,那么请放心,Nginx 不会成为瓶颈。如果你真的想优化性能,数据库查询将是第一个开始的地方。

关于python - 如果我不提供任何静态内容,我是否需要 Nginx 和 Gunicorn?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59089648/

相关文章:

python - 如何使用子进程模块杀死(或避免)僵尸进程

Javascript 和 django 应用程序/样板集成

django - 检查对象是否在模板中的多对多列表中

ruby-on-rails - nginx.conf - Passenger_env_var 未在 Rails 中加载

ubuntu - nginx.service 启动失败 : Unit nginx. 找不到服务

python - unwrap() 后使用 beautifulSoup 获取真实文本

python - FastAPI 中的中间件,用于为每个请求生成 UUID 并发送到日志

python - 正则表达式:验证没有查询参数的 URL 路径

python - 我怎么知道工作是否已经/正在执行? - 定时任务

nginx - 是否可以在我的 nginx.conf 中包含包含空格的根路径