nginx设置动态页面缓存302跳转


网站有很多图片都是动态从数据库获取链接地址,这样很浪费服务器资源,使用nginx可以把动态请求地址和从数据库获取的静态url对应关系缓存下来。

源请求地址:

http://www.test.com/test/GetJpgUrl.aspx?type=1&resid=test&orgid=123&from=Platform&cult=CN

请求数据库获取到的静态地址:

http://images.test.com/download/02/test.jpg

nginx配置如下:

http区域配置缓存参数:

#注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
proxy_temp_path /usr/local/nginx/html/proxy_temp_dir;
#设置Web缓存区名称为cache_one,内存缓存空间大小为4096MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为30GB。
proxy_cache_path /usr/local/nginx/html/proxy_cache_dir levels=1:2 keys_zone=cache_one:4096m inactive=1d max_size=30g;

server区域配置:

location ~ /test/.*GetJpgUrl.aspx.* {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_pass http://192.168.0.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host:$server_port;
proxy_set_header X-NginX-Proxy true;
proxy_redirect off;
proxy_ignore_headers Expires;
proxy_ignore_headers Cache-Control;
proxy_cache cache_one;
proxy_cache_valid 302 7d;
add_header Nginx-Cache "$upstream_cache_status";
expires 1d;
}

缓存效果:

相关解释如下:

 

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;

nginx可以通过 expires 指令来设置浏览器的Header
语法: expires [time|epoch|max|off]
默认值: expires off
作用域: http, server, location
使用本指令可以控制HTTP应答中的“Expires”和“Cache-Control”的头标,(起到控制页面缓存的作用)。
可以在time值中使用正数或负数。“Expires”头标的值将通过当前系统时间加上您设定的 time 值来获得。
epoch 指定“Expires”的值为 1 January, 1970, 00:00:01 GMT。
max 指定“Expires”的值为 31 December 2037 23:59:59 GMT,“Cache-Control”的值为10年。
-1 指定“Expires”的值为 服务器当前时间 -1s,即永远过期

例子:
图片缓存30天

location ~.*\.(jpg|png|jpeg)$
 {
 expires 30d;
 }

js css缓存一小时

location ~.*\.(js|css)?$
 {
 expires 1h;
 }



Whatever is worth doing is worth doing well.