在 2012-05-16 16:49:10,agentzh <age...@gmail.com> 写道:
>Hello!
>
>2012/5/16 james_163 <jame...@163.com>
>>
>> 问您个问题,我的应用里面使用ngx_memc模块(实际是openresty bundle 0.13rc3)存取memcached,
>> 并且memcached中的values需要gzip压缩。
>> 逻辑是memcached miss的话,转到后台服务,取得压缩的response存到(通过ngx_memc)memcached,
>> 命中的话返回memcached的value(应该是以前压缩过的),这段逻辑用了content_by_lua
>> 现在问题是为了得到压缩的数据,我在proxy请求到后台时把Accept-Encoding设为gzip,
>> 发现memcached里面确实保存了压缩数据,
>> 但是返回到客户端(浏览器),无论是FireFox还是Chrome都没能解压,显示乱码(缺少Content-Encoding:gzip)。
>> 不知道怎么才能在response中加上Content-Encoding:gzip,试了一些directive都没能成功,以及lua的directives。
>
>在 Lua 里设置 Content-Encoding: gzip 响应头的方法是:
>
> ngx.header.content_encoding = "gzip"
是的,可以了。
我对lua不熟,所以开始用的是单引号ngx.header.content_encoding = ’gzip‘,结果nginx重启报错就放弃了。
>在此语句之前不应执行 ngx.send_headers/ngx.print/ngx.say/ngx.flush,否则响应头在此语句执行之前就已经发送出去了。
我是在print之前调用。
>不过,如果请求头 Accept-Encoding 中如果没有 gzip 的话,你需要自己用 lua-zlib 之类的 Lua
>库先对数据解压,然后再发送,以免让那些不支持 gzip 的 HTTP 客户端出错。
感谢您的提示!很有用!
>>
>> 您百忙之际能否指点一下呢,非常感谢!
>> ps.
>> google到
>> memcached_gzip_flag 和 gunzip 两个patches,其中您提到会port memcached_gzip_flag到ngx_memc
>> http://mailman.nginx.org/pipermail/nginx-devel/2009-December/000066.html
>> 不知您是否还记得,或者是我用的版本不对?
>
>我后来变了主意,并不打算将此功能添加到 ngx_memc 模块中,而是打算给 ngx_srcache 模块添加透明的 gzip 压缩和解压支持。
>
>另外,建议你订阅 openresty
>邮件组并在那里和我们交流:https://groups.google.com/group/openresty/
>(国内访问可能需要翻墙),这样更多的人可以参与讨论 ;)
一定,谢谢!
另外一个小问题,我设置上面您说的 Content-Encoding: gzip,浏览器第一次访问可以解压,再次访问时发生乱码(没解压),
我google到可能是您提到的srcache-nginx-module-0.13rc2的一个bug,我现在用ngx_openresty/1.0.10.44,srcache-nginx-module-0.13rc3 ,
我会升到最新的ngx_openresty试试。
再次感谢!
>因为此邮件并未含有敏感信息,我已抄送给了 openresty 邮件列表,以便更多人看到。
>
>Best regards,
>-agentzh