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


    在只使用一台机器的情况下,为什么在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 做负载均衡那就几乎是必须了。

    项目用的是前后端分离,一边是webpack + vuex 一边是django,如果不用nginx的话,每次更新前端代码,都需要把生成的静态文件放到static,然后重启uwsgi服务,如果加了一层nginx,就可以前后端分开来部署,每次前端代码更新的时候,只要重启前端服务就可以了,甚至前端服务可以单独拿出来做cdn分发。

    使用nginx转发还是很方便的。曾经一个服务器同时跑了apache, tomcat, node3个服务。但是想做到不跨域,用url来做分发。这时候就用到nginx了。

    如果仅仅是一个提供API接口的后端的话,我觉得可以直接用uwsgi。

    根据以上内容,自己归纳如下:
    • Nginx更安全
    • Nginx能更好地处理静态资源(通过一些http request header)
    • Nginx也可以缓存一些动态内容
    • Nginx可以更好地配合CDN
    • Nginx可以进行多台机器的负载均衡
    • 不需要在wsgi server那边处理keep alive
    • 让Nginx来处理slow client
    • 还有一个更隐蔽的区别是,像uWSGI支持的是wsgi协议,Nginx支持的是http协议,它们之间是有区别的。
  • 相关阅读:
    java后台打开浏览器代码
    java国际化
    Struts2之action 之 感叹号 ! 动态方法调用
    ssh框架总结之action接收参数的三种方式
    电脑开机过程
    4.18quaternion rotation
    4.2
    "hello,world"lena
    bash 简介
    SCHEDULE
  • 原文地址:https://www.cnblogs.com/panchanggui/p/14840483.html
Copyright © 2020-2023  润新知