[英]How to make mod_cache work properly with dynamic content?
我正在尝试使用mod_cache来缓存动态生成的内容。 这是我的Apache配置:
CacheEnable mem /
MCacheSize 4096
MCacheMaxObjectCount 100
MCacheMinObjectSize 1
MCacheMaxObjectSize 2048
CacheIgnoreCacheControl On
CacheIgnoreNoLastMod On
CacheStorePrivate On
CacheStoreNoStore On
<Location /cgi-bin>
SetHandler cgi-script
Options +ExecCGI
</Location>
这是一个CGI脚本(仅用于测试):
#!/opt/app/phantomjs/bin/phantomjs
var date = new Date('Sun, 01 Jan 2012 00:00:00 GMT');
console.log('Last-Modified: '+ date.toUTCString());
console.log('Cache-Control: max-age=' + (365 * 24 * 60 * 60)+ ', public');
date.setDate(date.getDate() + 365);
console.log('Expires: '+ date.toUTCString() + '\n\n');
// lengthy operation here...
console.log(content);
这基本上有效。 但是如果客户端请求带有If-Modified-Since
标头的cgi-bin, 会发生什么 :
这对我来说毫无意义。 Apache在发送未修改的响应之前等待整个响应。
我的期望 :
有没有办法完成它?
应如下更改CGI脚本。
不要使用静态的上次修改日期。 应将动态资源的Last-Modified设置为当前执行时间。
Cache Control指令包含一个类型错误'pulic'应该是'public'
不需要Expires指令,因为Cache-Control的优先级高于Expires。
发送标头后,您的预期行为“终止CGI脚本”是不可能的。 如果缓存有效,则在缓存条目无效之前不会执行CGI脚本。
这是我在上次评论中所说的解决方案。 将CGI执行转发到内部虚拟主机。 使用此配置,mod_cache将按预期工作。 我用apache 2.2.21在我的机器上测试了它。
# virtual cgi host - used internally only for cgi execution
<VirtualHost *:8080>
##ServerAdmin postmaster@dummy-host.localhost
DocumentRoot "C:/Project/web"
ServerName cgi-bin.local
ErrorLog "logs/cgi-bin-error.log"
CustomLog "logs/cgi-bin-access.log" combined
LogLevel debug
<Location /cgi-bin>
SetHandler cgi-script
Options +ExecCGI
</Location>
</VirtualHost>
# Virtual host used by client
<VirtualHost *:8080>
##ServerAdmin postmaster@dummy-host.localhost
DocumentRoot "C:/Project/web"
ServerName web.local
ErrorLog "logs/web-error.log"
CustomLog "logs/web-access.log" combined
CacheEnable mem /
MCacheSize 4096
MCacheMaxObjectCount 100
MCacheMinObjectSize 50
MCacheMaxObjectSize 20480
MCacheMaxStreamingBuffer 20480
CacheIgnoreCacheControl On
CacheIgnoreNoLastMod On
CacheStorePrivate On
CacheStoreNoStore On
ProxyRequests Off
ProxyPass /cgn-bin http://cgi-bin.local:8080/
ProxyPassReverse /cgn-bin http://cgi-bin.local:8080/
</VirtualHost>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.