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 压力会有多高,内心慌的一匹。。有把这个模块线上实战的老铁吗?

4817 次点击
所在节点    NGINX
30 条回复
0ZXYDDu796nVCFxq
2018-11-21 16:13:37 +08:00
大规模用过,没问题
AnnanDou
2018-11-21 16:17:52 +08:00
应该就是吃内存和 cpu 的问题吧
lhx2008
2018-11-21 16:20:27 +08:00
gzip 很常见吧,阿里云腾讯云的 cdn 的 nginx 都有开 gzip,而且大部分网站也有开 gzip,比起后端的资源占用,nginx 这里真的不值得一提
另外,现在开始流行 br 算法了
firebroo
2018-11-21 16:29:24 +08:00
@gstqc 好的,老哥
isCyan
2018-11-21 16:31:43 +08:00
@lhx2008 他说的是服务端解压 gzip 不是压缩
firebroo
2018-11-21 16:31:57 +08:00
@lhx2008 br 我知道,但是没找到 nginx 的解压模块。
jimrok
2018-11-21 17:37:42 +08:00
还可以研究一下 http_gzip_static_module 模块
liuxu
2018-11-21 17:48:35 +08:00
baidu:
Content-Encoding: gzip

google:
content-encoding: br
305835227fadf
2018-11-21 17:54:04 +08:00
前后端 nginx 之间的链路真的这么紧张吗?这种做法有点骚啊。前端 nginx 还要判断用户端是否支持 gzip,鸡肋。
0ZXYDDu796nVCFxq
2018-11-21 17:57:06 +08:00
@305835227fadf 回源强制 gzip
发现客户端不支持 gzip 并且源站返回 gzip 内容就解压

本来前端 nginx 就必须判断客户端是否支持 gzip
305835227fadf
2018-11-21 18:00:48 +08:00
CDN 回源强制 gzip?这个苛刻点了吧,一般场景没这样干的吧?如果用户浏览器访问不支持压缩,那 CDN 的缓存就没意义了,或者 CDN 有 2 种缓存,压缩和非压缩的。
0ZXYDDu796nVCFxq
2018-11-21 18:02:40 +08:00
@305835227fadf 可以只缓存一份压缩的,客户端不支持压缩再解压
305835227fadf
2018-11-21 18:07:49 +08:00
这就需要在 CDN 的缓存服务器写逻辑配置了吧?还有贵司也太精打细算了吧。。我是觉得是否有必要这么做,虽然技术上可行。
firebroo
2018-11-21 18:55:12 +08:00
@liuxu 我上面说了 nginx 没找到 br 算法解压模块,大佬你给写 nginx 的 br 解压模块吗
firebroo
2018-11-21 18:58:00 +08:00
@305835227fadf 做法是有点极端,但是我的现实环境就是这样。。CND 不清楚,但是我测试 nginx 本身就实现了你说的逻辑,发现客户端不支持解压才会去解压。
liuxu
2018-11-21 19:57:23 +08:00
@firebroo

google 出的,你为什么不找 google

https://github.com/google/ngx_brotli
mytry
2018-11-21 19:58:53 +08:00
用 nginx lua 写个监控 CPU 和内存的程序吧,根据当前负载动态调整要不要压缩,以及压缩比都可以调整~
firebroo
2018-11-21 21:13:56 +08:00
@liuxu 我擦,你是一直看东西只看一半吗。。
ryd994
2018-11-22 01:08:33 +08:00
解压的开销一般小于压缩的开销
ladypxy
2018-11-22 03:23:16 +08:00
没必要用这个模块啊,你的需求其实在前端开始 nginx cache 就可以减少很多前后端的压力了。还有这楼里很多人分不清 gzip 和 gunzip 模块的区别……

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

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

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

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

© 2021 V2EX