最近,我在mod\wsgi应用程序中遇到了类似的问题;我试图更新一个使用内置磁盘缓存的apache配置,改为使用socache/memcache。在
磁盘缓存正常工作,但切换到memcache或shmcb不起作用。如果我对我想要缓存的资源发出请求,它不会将其存储在缓存中(CacheDetailHeader对此很有帮助)。在调试时检查日志时,我发现以下消息:[Wed Dec 05 18:52:16.571002 2018] [cache_socache:debug] \
[pid 884:tid 140422596777728] mod_cache_socache.c(389): \
[client 127.0.0.1:56576] AH02346: URL 'http://127.0.1.1:80/cacheme/c?' \
had no explicit size, ignoring, referer: http://127.0.0.1/
socache似乎不喜欢没有明确尺寸的对象。我尝试将那些mod memcache设置的更新的socache等价物设置为足够大的值:CacheSocacheMaxSize和{}。在
我知道Content-Length头正在被设置并通过它到达某个地方;当我故意计算错误时,它出现在mod\wsgi日志中。在
我发现了一些东西:即使您自己设置了Content-Length头,它也被apache gzip压缩了。这将更改长度;当Apache不知道长度是多少时,它将切换到chunked并删除Content-Length头。
我发现:Content-Type: text/html
Content-Length设置为我的utf-8编码大小
在python/mod wsgi应用程序中设置,并且:SetEnv no-gzip 1
在apache配置中,设置对象将其放入shmcb缓存中。在
看起来,当apachegzip处理一个对象时,它会将头更改为socache不接受它。在
我四处寻找使它们兼容的方法,但在这个问题上找不到太多。mod_cache文档中提到了重新排序缓存/放气过滤器:
如果我放入一个指令来重新排序缓存/放气过滤器,这就起作用了:
^{pr2}$
奇怪的是,在缓存未命中时,服务器返回gzip压缩的内容,但在缓存命中时,服务器返回未编码的text/html。这看起来很奇怪,但我对FilterChain指令的理解还不够深入,无法尝试这些指令。在
我在一个与php/content length相关的问题中也提到了这一点:
答案是,如果他们将DeflateBufferSize设置为足够大的值,那么内容长度就会被设置。在
我没法让它发挥作用。在
因此,似乎有人在选择cached或gzip之间左右为难。在