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;
配置缓存相关选项
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_bypass|配置nginx向客户端发送响应数据时,不从缓存中获取的条件||proxy_cache_lock|是否开启缓存的锁功能||proxy_cache_lock_timeout|设置缓存的锁功能开启后的超时时间||proxy_no_cache|配置什么情况下不使用缓存||proxy_cache_min_uses|当一个url被重复请求达到指定次数的时候才缓存||proxy_cache_revalidate|用于当缓存过期时,nginx通过一次If-Modified-Since的请求头去验证缓存内容是否过期||proxy_cache_use_stale|设置状态,用于内容源web服务器处于这些状态时,nginx向客户端响应历史缓存数据。|