V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
TheCure
V2EX  ›  Python

Gunicorn 前面一定要套一个 Nginx 吗?

  •  1
     
  •   TheCure · 2016-09-09 14:43:11 +08:00 · 7011 次点击
    这是一个创建于 2786 天前的主题,其中的信息可能已经有所发展或是发生改变。

    flask 框架的网站,现在部署的时候,很多人推荐给 Gunicorn 前面加一个 Ngnix 反代.

    1.我们现在一台物理机只会部署一个网站,没有多域名的需求,但是页面的静态文件也在这台主机上.

    2.前面会有一个 LVS 的东西来做多台机器的三层负载均衡,不需要 Ngnix 做七层负载均衡.

    在我们这种情况下,使用 Nginx+Gunicorn 相比使用 Gunicorn 有啥效果?

    Nginx 比 Gunicorn 能更好的处理连接,能够把数据 buffer 住然后传给 gunicorn,关于这点能够详细解答下?

    21 条回复    2016-09-10 19:49:48 +08:00
    wyntergreg
        1
    wyntergreg  
       2016-09-09 14:48:05 +08:00
    最起码能优化静态资源吧
    loading
        2
    loading  
       2016-09-09 14:52:50 +08:00 via Android
    静态资源也会造成堵塞
    est
        3
    est  
       2016-09-09 14:55:52 +08:00
    裸奔也是可以的。我就见过不少 Tornado 裸奔的。

    但是你要注意 gunicorn 的 graceful reload 是有坑的。。。
    killpanda
        4
    killpanda  
       2016-09-09 14:56:31 +08:00 via iPhone
    @est 什么坑?
    pcar
        5
    pcar  
       2016-09-09 15:00:47 +08:00
    我也是套了 nginx 主要事静态文件
    rrfeng
        6
    rrfeng  
       2016-09-09 15:01:08 +08:00   ❤️ 2
    一切非 Nginx 的东西加个 Nginx 都是有意义的,这就是 Nginx 存在的意义(逃
    qingchn
        7
    qingchn  
       2016-09-09 15:08:15 +08:00
    看需求
    mimzy
        8
    mimzy  
       2016-09-09 15:32:26 +08:00
    @rrfeng 看出了万物基于 Nginx 的感觉(
    lightening
        9
    lightening  
       2016-09-09 16:04:35 +08:00   ❤️ 6
    我做 Ruby 的,用 Ruby 的 unicorn 的话,假设说你有 2 个进程,但是有两个用户上传文件,网速还很慢,那这两个用户同时上传文件时第三个请求就必须排队。前面套 Nginx 的话, nginx 会负责接收那两个网速很慢的用户上传的文件,等 nginx 收到全部数据后,再一下子发给 unicorn 。 Nginx 在收取文件的同时, unicorn 还能接收其他请求。

    然后还有用这个原理做 slow connection attack 的。
    jppxhz01
        10
    jppxhz01  
       2016-09-09 16:32:17 +08:00 via Android
    @lightening 学习了
    pangliang
        11
    pangliang  
       2016-09-09 19:26:14 +08:00
    说到底还是 看 线程模型, 如果 Gunicorn 也是 更 nginx 一样 用的非阻塞 socker + 反应堆模型, 可以不用套; 如果是 one connect per thread (process) 模型; 那最好就是套一个
    TheCure
        12
    TheCure  
    OP
       2016-09-09 21:36:14 +08:00
    @lightening unicorn 不是用弹出式线程来处理用户请求的吗? 几个进程就几个并发?
    Abirdcfly
        13
    Abirdcfly  
       2016-09-09 22:11:24 +08:00 via iPhone
    lightening
        14
    lightening  
       2016-09-09 22:44:41 +08:00
    @callofmx unicorn 并不是吧。 Unicorn 是单线程的,所以 app 线程不安全也没关系。 Puma 没有这个问题。
    DuckJK
        15
    DuckJK  
       2016-09-10 00:01:28 +08:00
    @lightening 好像是上传一个超级大的文件, keep-alive ,然后每次上传很小的部分。
    ericls
        16
    ericls  
       2016-09-10 00:02:59 +08:00 via iPhone
    @rrfeng cowboy 加 nginx 可能会降低性能
    lightening
        17
    lightening  
       2016-09-10 03:44:29 +08:00 via iPhone
    @DuckJK 但是 slow connection attack 肯定不会这样。另外 size 正常但网速奇慢也会这样。
    ryd994
        18
    ryd994  
       2016-09-10 14:37:32 +08:00 via Android   ❤️ 2
    @lightening
    @DuckJK

    http slow 其实有很多
    slow download 就是慢下载,故意限速,多开连接
    slow loris 就是慢 header ,请求带一个超大的 header ,然后慢慢发
    slow post 慢慢发 post body

    重点在于开大量并发,保持服务端忙碌

    Nginx 加足够 buffer 对付起来很有效
    此外, gunicorn 因为基于 gevent ,也是基本不怕的

    大多数时候 Nginx 的主要作用:
    1. 服务静态
    2. 提供横向扩展能力
    3. fail over
    4.扛各种暴力攻击(只要不涉及后端的都多少有用)
    ryd994
        19
    ryd994  
       2016-09-10 14:46:43 +08:00
    不过讲真,套了 nginx 之后也未必要 gunicorn 了
    基于多线程的都问题不大,因为前面 nginx 缓冲下来了,后面都是最快速度(本地 IO )收发然后满速处理,所以 gunicorn 的 event driven 就用不到了
    我一般是 nginx 套 uwsgi
    izoabr
        20
    izoabr  
       2016-09-10 18:16:50 +08:00
    我套是因为 SSL
    qweweretrt515
        21
    qweweretrt515  
       2016-09-10 19:49:48 +08:00
    建议加
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4310 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 10:08 · PVG 18:08 · LAX 03:08 · JFK 06:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.