您的位置:首页 > 运维架构 > Nginx

缓存配置

2019-07-07 21:44 1196 查看

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状态码设置缓存时间

其他缓存配置 |配置项|说明| |---|---| |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向客户端响应历史缓存数据。|

3、缓存清理
nginx虽然支持配置缓存,却不支持清理指定url的缓存,需要借助第三方模块ngx_cache_purge来实现。下面记录下该工具的用法。
1)首先要下载ngx_cache_purge 下载地址
2)下载完成后,压缩包解压到/usr/local/,命名为ngx_cache_purge
3)切换到nginx安装包的目录下,重新编译安装

./configure --prefix=/usr/local/nginx --with-http_ssl_module --add-module=/usr/local/ngx_cache_purge
make && make install

安装完成后重启nginx,访问页面如果可以访问成功,则安装完成。
配置清除缓存的目录

location ~/purge(/.*) {
proxy_cache_purge cache_one $host$1$is_args$args;
}

注意事项:1)purge的location配置要在所有location之前;2)缓存区域的名称要和缓存配置中保持一致,即cache_one;3)缓存key的规则要和之前设置的一致,之前设置的规则为$host$uri$is_args$args,所以这里设为$host$1$is_args$args,其中的$1指代(/.*)中匹配的部分。
测试:
访问地址:http://192.168.1.5:8080/headimg.jpg

上图说明该文件来源于缓存。 清除缓存:访问http://192.168.1.5:8080/purge/headimg.jpg

一开始访问该地址的时候出现404 not found而不是上图中的successful purge,经查阅资料,在安装完成ngx_cache_purge之后,需要执行

nginx -s stop
nginx

重启,而不能用nginx -s reload重启。 清除缓存后重新访问图片。出现:

说明缓存已经清除。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息