服务器架构为前端一个nginx反向代理 后面两台nginx
反向代理配置为
proxy_redirect off;
proxy_temp_path /www/proxy/temp;
proxy_cache_path /www/proxy/cache levels=1:2 keys_zone=web_cache:100m inactive=1d max_size=30g;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 32k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 256k;
proxy_max_temp_file_size 128m;
location /
{
proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header;
proxy_cache web_cache;
proxy_cache_valid 200 304 1d;
proxy_cache_key $host$uri$is_args$args;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header X-Cache HIT;
proxy_pass http://web;
expires 1d;
}
location ~ .*\.(php|php5)?$
{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://web;
expires 1d;
}
配置完成后访问页面除html页面外其他页面都可以命中
查看html http头
Cache-Control max-age=86400
Connection keep-alive
Content-Encoding gzip
Content-Type text/html; charset=UTF-8
Date Wed, 26 Dec 2012 02:59:23 GMT
Expires Thu, 27 Dec 2012 02:59:23 GMT
Pragma no-cache
Server nginx
Transfer-Encoding chunked
Vary Accept-Encoding
X-Cache MISS
原来是pragma的问题 查一下nginx手册
有这两个选项
proxy_ignore_headers:禁止处理来自代理服务器的应答,可以指定的字段为”X-Accel-Redirect”, “X-Accel-Expires”, “Expires”或”Cache-Control”。
proxy_hide_header:nginx不对从被代理服务器传来的”Date”, “Server”, “X-Pad”和”X-Accel-…“应答进行转发,这个参数允许隐藏一些其他的头部字段,但是如果上述提到的头部字段必须被转发,可以使用proxy_pass_header指令
先使用proxy_hide_head隐藏后端pragma头
然后使用proxy_ignore_headers 处理来自代理服务器的cache-control和expires头
配置:
proxy_hide_header Pragma;
proxy_ignore_headers Expires;
proxy_ignore_headers Cache-Control;
再次查看html的http头
Name Value
Cache-Control max-age=86400
Content-Encoding gzip
Content-Type text/html; charset=UTF-8
Date Wed, 26 Dec 2012 02:57:48 GMT
Expires Thu, 27 Dec 2012 02:57:48 GMT
Server nginx
Vary Accept-Encoding
X-Cache HIT
已经可以命中缓存