flask 框架的网站,现在部署的时候,很多人推荐给 Gunicorn 前面加一个 Ngnix 反代.
1.我们现在一台物理机只会部署一个网站,没有多域名的需求,但是页面的静态文件也在这台主机上.
2.前面会有一个 LVS 的东西来做多台机器的三层负载均衡,不需要 Ngnix 做七层负载均衡.
在我们这种情况下,使用 Nginx+Gunicorn 相比使用 Gunicorn 有啥效果?
Nginx 比 Gunicorn 能更好的处理连接,能够把数据 buffer 住然后传给 gunicorn,关于这点能够详细解答下?
1
wyntergreg 2016-09-09 14:48:05 +08:00
最起码能优化静态资源吧
|
2
loading 2016-09-09 14:52:50 +08:00 via Android
静态资源也会造成堵塞
|
3
est 2016-09-09 14:55:52 +08:00
裸奔也是可以的。我就见过不少 Tornado 裸奔的。
但是你要注意 gunicorn 的 graceful reload 是有坑的。。。 |
5
pcar 2016-09-09 15:00:47 +08:00
我也是套了 nginx 主要事静态文件
|
6
rrfeng 2016-09-09 15:01:08 +08:00 2
一切非 Nginx 的东西加个 Nginx 都是有意义的,这就是 Nginx 存在的意义(逃
|
7
qingchn 2016-09-09 15:08:15 +08:00
看需求
|
9
lightening 2016-09-09 16:04:35 +08:00 6
我做 Ruby 的,用 Ruby 的 unicorn 的话,假设说你有 2 个进程,但是有两个用户上传文件,网速还很慢,那这两个用户同时上传文件时第三个请求就必须排队。前面套 Nginx 的话, nginx 会负责接收那两个网速很慢的用户上传的文件,等 nginx 收到全部数据后,再一下子发给 unicorn 。 Nginx 在收取文件的同时, unicorn 还能接收其他请求。
然后还有用这个原理做 slow connection attack 的。 |
10
jppxhz01 2016-09-09 16:32:17 +08:00 via Android
@lightening 学习了
|
11
pangliang 2016-09-09 19:26:14 +08:00
说到底还是 看 线程模型, 如果 Gunicorn 也是 更 nginx 一样 用的非阻塞 socker + 反应堆模型, 可以不用套; 如果是 one connect per thread (process) 模型; 那最好就是套一个
|
12
TheCure OP @lightening unicorn 不是用弹出式线程来处理用户请求的吗? 几个进程就几个并发?
|
13
Abirdcfly 2016-09-09 22:11:24 +08:00 via iPhone
|
14
lightening 2016-09-09 22:44:41 +08:00
@callofmx unicorn 并不是吧。 Unicorn 是单线程的,所以 app 线程不安全也没关系。 Puma 没有这个问题。
|
15
DuckJK 2016-09-10 00:01:28 +08:00
@lightening 好像是上传一个超级大的文件, keep-alive ,然后每次上传很小的部分。
|
17
lightening 2016-09-10 03:44:29 +08:00 via iPhone
@DuckJK 但是 slow connection attack 肯定不会这样。另外 size 正常但网速奇慢也会这样。
|
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.扛各种暴力攻击(只要不涉及后端的都多少有用) |
19
ryd994 2016-09-10 14:46:43 +08:00
不过讲真,套了 nginx 之后也未必要 gunicorn 了
基于多线程的都问题不大,因为前面 nginx 缓冲下来了,后面都是最快速度(本地 IO )收发然后满速处理,所以 gunicorn 的 event driven 就用不到了 我一般是 nginx 套 uwsgi |
20
izoabr 2016-09-10 18:16:50 +08:00
我套是因为 SSL
|
21
qweweretrt515 2016-09-10 19:49:48 +08:00
建议加
|