1、nginx永久缓存配置
为了得到更好的响应速度和用户体验,对于一些静态文件,nginx可以采用缓存策略,从而不用每次加载静态文件都向后台服务器发送请求。今天记录下nginx的缓存功能配置。
为了便于测试,先在后台服务器的index.html页面添加一张图片headimg.jpg,效果如下:
下面开始配置缓存:
1)在nginx下新建一个文件夹cache,该目录是存放缓存文件的。
mkdir cache
chmod 777 cache
2)修改nginx.conf配置
server{
listen 8080;
server_name localhost;
location / {
root cache;
proxy_store on;
proxy_store_access user:rw group:rw all:r;
#proxy_temp_path用于存储临时文件,配置文件生效时会自动生成此文件
proxy_temp_path cache_temp;
proxy_pass http://192.168.1.6;
}
}
配置生效后强刷页面,则可以看到缓存的文件:
测试加载的文件来源:nginx已经缓存了文件,然后我将后台服务器的该文件删除,刷新页面,发现图片无法显示,说明文件来源于后台,而不是nginx缓存,重新修改下nginx.conf,改成下面的配置即可:
server{
listen 8080;
server_name localhost;
location / {
root cache;
proxy_store on;
proxy_store_access user:rw group:rw all:r;
proxy_temp_path cache_temp;
if (!-e $request_filename) {
proxy_pass http://192.168.1.6;
}
}
}
上述的配置方式对于http://192.168.1.5:8080/ 这样的路径会报403 Forbidden错误,因为认为缓存了一个空文件名的文件(directory index of "/usr/local/nginx/cache/" is forbidden)。要解决此办法,可以考虑单独设置一个静态文件专用的location,然后设置此规则,不过这么设置的话又不是很方便维护,有利有弊吧。
2、临时缓存服务器
在http配置快中配置:
proxy_temp_path /usr/local/nginx/proxy_temp_dir;
proxy_cache_path /usr/local/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:50m inactive=1h max_size=500m;
配置项
说明
proxy_temp_path
存储源服务器响应内容的临时目录,配置生效后自动生成文件夹
proxy_cache_path
缓存的存储目录,配置生效后自动生成文件夹
levels
缓存目录下的层级目录结构,根据哈希后的请求url地址创建。1:2表示采用两层目录,第一层目录是1个字符,第二层目录是2个字符
keys_zone
指定缓冲区名称和大小
inactive
表示主动清空在指定时间内未被访问的缓存
max_size
表示磁盘空间大小
配置缓存相关选项
server{
listen 8080;
server_name localhost;
#添加两个响应头信息,用于获知访问的服务器地址与缓存是否成功
add_header X-Via $server_addr;
add_header X-Cache $upstream_cache_status;
location / {
proxy_cache cache_one;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 1h;
proxy_cache_valid 304 1h;
proxy_cache_valid 301 302 1h;
proxy_cache_valid any 1h;
proxy_pass http://192.168.1.6;
}
}
配置项
说明
proxy_cache
设置缓存区域名称
proxy_cache_key
用于设置hash的Key值组成规则,省略则采用默认配置。上述的$uri指域名与参数之间的部分;$is_args指有url参数时,取值?,否则取值空串;$args保存url参数,没参数时取空串
proxy_cache_valid
对不同http状态码设置缓存时间