当前位置:  开发笔记 > 编程语言 > 正文

使用压缩数据填充memcached,直接从nginx提供

如何解决《使用压缩数据填充memcached,直接从nginx提供》经验,为你挑选了0个好方法。

在python中,我生成复杂的静态页面.然后我将它们放入memcached中,以便下次它们被请求时,它们可以直接从Nginx服务(根本没有点击python)

这很有效,直到我意识到在Nginx中存储未压缩的html是多么低效.所以我尝试在存储之前手动gzip数据,并让Nginx直接返回(只是设置content-encoding:gzip),但是虽然Nginx的文档表明它是可能的,但我还是无法让它工作.

在我的测试中,我通过NPE的回答在python中使用gzip填充缓存中的数据,如何在Python中压缩字符串?.我还将这些的memcached标志设置为1.

在此时没有其他更改,Nginx提供原始数据,在浏览器中显示为垃圾.

之后,我更改了该位置的Nginx设置,将该memcached_gzip_flag字段设置为1,以便Nginx知道数据已经被gzip压缩,但是nginx仍然提供原始数据.我已经尝试过的nginx的的设置,每一个组合:gzip onmemcached_gzip_flag 1,但在所有情况下,浏览器显示原始数据(第一直接命中蟒蛇后); 在某些情况下,firebug报告内容编码是gzip(但仍显示原始gzip数据),而在其他情况下,内容编码未设置.

总的来说,我的攻击计划是欺骗nginx使用正确的标头提供已经压缩的数据,以便浏览器解压缩它.

我在nginx 1.6和memcached 1.4.13

这是相关的nginx配置行,最初可以使用.第一次命中从python中获取数据,填充缓存,第二次命中直接来自memcached.

location ~*  
{
    if ($request_method = POST){
        break;
    }
    memcached_gzip_flag 1;
    set $memcached_key $uri;
    memcached_pass 127.0.0.1:11211;
    error_page 404 405 502 = @redo;
    default_type text/html;
}

更新:我试验了更多(评论中的细节),但仍然没有结果.

UPDATE POST BOUNTY:我对此没有任何好的答案.基本上,我根本无法使用该memcached_gzip_flag功能.未来回答者的注意事项:如果你回答这个问题,我会给你赏金并奖励给你.这比将一半的赏金自动判给完全错误的答案更可取.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有