首页  >  文章  >  后端开发  >  使用了Gunicorn或者uWSGI,为什么还需要Nginx?

使用了Gunicorn或者uWSGI,为什么还需要Nginx?

WBOY
WBOY原创
2016-06-06 16:23:271808浏览

请问如果在只使用一台机器的情况下,为什么在Gunicorn或者uWSGI前面还要加一层Nginx?哪些情景下这样做能提高性能?

回复内容:

一种情况,本地有多个 web 服务,有 Python、php、java 编写的,都想监听 80 端口,这个时候就必须有一个负责转发的服务了。

如果本机确定只跑这一个服务,但是 uwsgi 和 gevent 对于静态资源处理的并不是很好,一是性能问题,二是各种 HTTP 请求缓存头,处理的也没有 Nginx 完善。

然后还有一些安全问题,Nginx 作为专业服务器,暴露在公网相对比较安全(虽然有著名的心血漏洞),uwsgi 和 gevent 的话,漏洞恐怕只比 Nginx 多而不是少。

再来就是支持的协议,uwsgi 和 gunicon 早期是不支持 https 的,只能提供 http 给浏览器访问。虽然现在这两者都支持了,但是以后的 spdy 和http2,恐怕也是 nginx 跟进更快一些。

还有一些运维优势,比如服务器被人 CC,这是一种非常常见的情况,nginx 可以比较方便的把一些 IP 加入黑名单,直接改配置文件就好了。要是 uwsgi 或者 gunicorn,恐怕还要修改自己应用的代码,把 IP 过滤写进去。

题主说只考虑单台机器的情况,但是如果不考虑的话,那一个 nginx 做负载均衡那就几乎是必须了。 自问自答一下。

首先匿名用户回答的已经很全面了,谢谢。

我查了一下资料,查到了一个很好的回答。django - Why do I need nginx when I have uWSGI

根据以上内容,自己归纳如下:
  • Nginx更安全
  • Nginx能更好地处理静态资源(通过一些http request header)
  • Nginx也可以缓存一些动态内容
  • Nginx可以更好地配合CDN
  • Nginx可以进行多台机器的负载均衡
  • 不需要在wsgi server那边处理keep alive
  • 让Nginx来处理slow client
  • 还有一个更隐蔽的区别是,像uWSGI支持的是wsgi协议,Nginx支持的是http协议,它们之间是有区别的。

一句话来说,如果访问量不大,其实也没必要加个Nginx,uWSGI或者Gunicorn足以胜任。 1. nginx 相对 uwsgi (Gunicorn) 处理静态文件更有优势, 性能更好。

如果没有静态文件, 或静态文件另有服务器处理, 个人感觉可以不需要nginx。 Gunicorn直接暴露出来十分危险,还是挡一层吧。另外 Nginx 还有很多方便的路由功能,适合在前端挡一挡。
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn