nginx 开启--with-http_gunzip_module 模块是否有坑

2018-11-21 16:04:02 +08:00
 firebroo

目前需求需要优化前后端 nginx 之间传输的流量,压缩数据节约小水管带宽,所以准备开启全流量压缩,大概流程就是前端 nginx 会 set 一个 header 到后端 nginx,proxy_set_header Accept-Encoding "gzip"; 让后端 nginx 开启压缩,前端 nginx 再使用这个模块解压数据返回给不支持解压 gzip 的客户端

网上搜了下,这个模块没有看到被大量投入使用的场景,所以上到线上环境,有点担心 gunzip 解压带给前端 nginx 的内存和 CPU 压力会有多高,内心慌的一匹。。有把这个模块线上实战的老铁吗?

4842 次点击
所在节点    NGINX
30 条回复
yuikns
2018-11-22 07:35:25 +08:00
看了好一会儿明白了…
楼主问题很简单,upstream 只提供了 gzip 的结果,但是 client 可能不接受。作为中间层就需要特殊处理下。
其实看过算法就知道,只要没啥漏洞,compress 固然可能要考虑性能,decompress 无论如何都是一把梭直接就能过… 除非有重大 bug
firebroo
2018-11-22 10:13:59 +08:00
@ladypxy cache 已经开了,对于动态数据准备再开启全压缩,我的场景就是这么特殊。。目标是前后端 nginx 的流量传输越小越好,小水管带宽还限流。。
firebroo
2018-11-22 10:16:36 +08:00
@yuikns 回头看看源码,准备一把梭了!
julyclyde
2018-11-22 10:19:24 +08:00
不需要判断客户端是否支持 gzip
不支持的就让他滚蛋好了
全程压缩发给客户端!!
firebroo
2018-11-22 10:20:41 +08:00
@julyclyde 兄弟不要鸡冻。。
julyclyde
2018-11-22 10:24:36 +08:00
@firebroo 想当年我上司为了兼容部分根本没消费能力的垃圾客户,不让用 gzip
那是电商网站啊!!
cloudyplain
2018-11-22 10:25:28 +08:00
@mytry ngx lua 怎么实现监控 CPU、内存?有例子码?
mytry
2018-11-22 10:34:21 +08:00
@cloudyplain nginx worker 里开个定时器,每隔一秒检测下就可以了。简单点直接用 lua 读 /proc/ 里的文件获取 CPU 等。觉得 lua 麻烦可以用其他程序写,通过文件或者管道和 lua 交互。最终通过 lua 设置 nginx 变量,决定压缩开不开以及比例。
firebroo
2018-11-22 10:42:32 +08:00
@julyclyde 流下了没有钱的眼泪
mytry
2018-11-23 15:18:19 +08:00
@cloudyplain 之前试过按网络流量监控的。之前买了个按流量计费的 ecs,所以在性能和流量之间找一个平衡点。当时还用 lua 做了个接口: https://alert.fun/traff_stat

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/510064

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX