网站有很多图片都是动态从数据库获取链接地址,这样很浪费服务器资源,使用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;
}
缓存效果:
相关解释如下:
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; }