方法一
代码如下 |
复制代码 |
server {
# ...此处省略N行配置
# example: /thumb/[md5].png_300x187.png
location ~ "/thumb/([0-9a-f]{32}.(png|jpg|gif))_(d+|-)x(d+|-).(png|jpg|gif)$" {
access_log off;
set $image $1;
set $width $3;
set $height $4;
# 建议使用try_files代替if
try_files /thumb/$image =404;
image_filter resize $width $height;
image_filter_buffer 10M;
# 只会在浏览器端缓存,若要在服务器端缓存,可采用proxy的方案(此处没有给出,可自行google)
expires 7d;
}
}
|
nginx还有一种缓存proxy_cache,它在设计上比proxy_store 更先进,采用内存+硬盘方式缓存,可以设置缓存大小和缓存过期。
代码如下 |
复制代码 |
http {
,,,,,
proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=imgcache:100m inactive=1d max_size=10g;
server {
........www.111com.net
location ~* ^.+.(js|ico|gif|jpg|jpeg|png|html|htm)$ {
log_not_found off;
access_log off;
expires 7d;
proxy_pass http://www.111com.net;
proxy_cache imgcache;
proxy_cache_valid 200 302 1d;
proxy_cache_valid 404 10m;
proxy_cache_valid any 1h;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
}
}
}
|
上面的代码将会使用一块最大100M的共享内存,用于硬盘上的文件索引,包括文件名和请求次数,每个文件在1天内若不活跃(无请求)则从硬盘上淘汰,硬盘缓存最大10G,满了则根据LRU算法自动清除缓存。