缓存配置
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重启。
清除缓存后重新访问图片。出现:
说明缓存已经清除。
- spring+hibernate 二级缓存 配置+java使用实例
- Ehcache缓存整合spring配置
- Coherence Step by Step 第三篇 缓存(二) 配置(翻译)
- smarty_smarty缓存的配置、使用和清除
- 缓存 spring xml配置
- 配置缓存方案
- Mybatis(三)--Mybatis缓存配置
- Spring自带缓存配置及Ehcache缓存
- spring-data-jpa+hibernate 各种缓存的配置演示
- 10025---高命中率的varnish缓存配置分享
- apache配置虚拟主机、日志切割、域名跳转、缓存
- lighttpd做缓存的简单配置
- Smarty缓存配置
- [置顶] 在Springboot上使用jedis来操作缓存redis --jedis的配置
- Java Hibernate 二级缓存配置及缓存的统计策略
- Spring如何配置数据库查询缓存/对象缓存EHCache
- Apache配置静态缓存
- Nginx内容缓存以及常见参数配置详析
- Redis 作为缓存服务器的配置