V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
AsaDong
V2EX  ›  NGINX

如何控制 proxy_pass 的 gzip 压缩

  •  
  •   AsaDong · 2014-05-12 11:59:53 +08:00 · 7201 次点击
    这是一个创建于 3840 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一种方法是
    proxy_set_header Accept-Encoding "";

    但如果后端强制gzip了呢 怎么gzip off
    第 1 条附言  ·  2014-05-12 13:30:17 +08:00
    现在问题是要使用 ssi,后端gzip后,就没法正常ssi了。

    所以一种是 proxy_set_header Accept-Encoding ""; 可以关闭gzip
    但有的后端强制gzip了 无效,所以nginx proxy这层有木有办法搞定
    13 条回复    2014-05-13 17:27:35 +08:00
    wangtai
        1
    wangtai  
       2014-05-12 12:20:23 +08:00
    我不知道应该怎么做,但是好奇为什么要gzip off?
    shiny
        2
    shiny  
       2014-05-12 12:23:56 +08:00
    @wangtai 因为后端 gzip 一次,nginx 再 gzip 一次就出问题了。
    xoxo
        3
    xoxo  
       2014-05-12 12:27:28 +08:00
    nginx:
    gzip off;
    即可
    AsaDong
        4
    AsaDong  
    OP
       2014-05-12 13:29:53 +08:00
    现在问题是要使用 ssi,后端gzip后,就没法正常ssi了。

    所以一种是 proxy_set_header Accept-Encoding ""; 可以关闭gzip
    但有的后端强制gzip了 无效,所以nginx proxy这层有木有办法搞定
    jsonline
        5
    jsonline  
       2014-05-12 13:31:43 +08:00 via Android
    用SSI干啥?
    AsaDong
        6
    AsaDong  
    OP
       2014-05-12 13:34:43 +08:00
    @jsonline 页面include公用的内容 或者页面局部更新的块呀
    Livid
        7
    Livid  
    MOD
       2014-05-12 13:35:17 +08:00   ❤️ 1
    nginx 有一个模块叫 gunzip,但是需要自己在编译的时候指定加进去,默认是没有的。

    http://nginx.org/en/docs/http/ngx_http_gunzip_module.html
    jsonline
        8
    jsonline  
       2014-05-12 13:38:41 +08:00 via Android
    @AsaDong 我是用grunt来include的
    AsaDong
        9
    AsaDong  
    OP
       2014-05-12 13:42:18 +08:00
    @Livid 谢谢livid 我试试哈
    wangtai
        10
    wangtai  
       2014-05-12 13:44:57 +08:00
    “从后端收到一个压缩过的文件,encoding应该是gzip。”
    “nginx会把数据发到gzip模块,是不是判断后端响应头,这个是gzip模块的逻辑了”
    我同事说的。
    ------
    以下我猜测的:
    你后端的响应头标记gzip了没?如果标记了,nginx是不是就不会重复做gzip了?nginx应该没有那么傻做两次gzip吧。
    AsaDong
        11
    AsaDong  
    OP
       2014-05-12 14:42:50 +08:00
    @wangtai 后端gzip了,问题是proxy_pass 收到的数据如果是gzip的就无法ssi。
    通过设置proxy_set_header Accept-Encoding ""; 可以取消部分项目的gzip。 但有的无效,所以问题在这里 怎么强制proxy到的数据不压缩
    HowardMei
        12
    HowardMei  
       2014-05-12 16:28:25 +08:00
    @AsaDong 让nginx处理不挺好么,还有啥性能比得过它?
    julyclyde
        13
    julyclyde  
       2014-05-13 17:27:35 +08:00
    你后端不标准
    未经客户端要求,服务器不得私自决定gzip
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5770 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 06:10 · PVG 14:10 · LAX 22:10 · JFK 01:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.