文档章节

缓存配置

城北徐公美
 城北徐公美
发布于 07/07 21:44
字数 1364
阅读 4
收藏 0

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重启。 清除缓存后重新访问图片。出现:

说明缓存已经清除。

© 著作权归作者所有

下一篇: 负载均衡
城北徐公美

城北徐公美

粉丝 1
博文 90
码字总数 50734
作品 0
嘉兴
私信 提问
spring中的缓存

Spring中的cache是为方法做缓存的,spring只是提供了个缓存抽象,具体的实现由的三方提供。 要使用Spring缓存,需要以下三步 1.向Spring配置文件导入context:命名空间 2.在Spring配置文件启用...

J星星点灯
2017/12/01
0
0
Ehcache缓存之web应用实例

Ehcache缓存之web应用实例 前面学习了缓存的基本配置和使用,下面继续学习如何缓存一个页面 我搭建的环境是 spring+freemarker+Maven ,没有使用hibernate配置缓存 ,想先弄个简单的页面缓存...

deepler
2012/06/06
1K
4
Spring Boot缓存实战 Redis + Caffeine 实现多级缓存

在前文我们介绍了如何使用Redis或者Caffeine来做缓存。 Spring Boot缓存实战 Redis 设置有效时间和自动刷新缓存-2 Spring Boot缓存实战 Caffeine 问题描述: 通过使用redis和Caffeine来做缓存...

xiaolyuh
2017/12/21
0
0
Hibernate-ORM:16.Hibernate中的二级缓存Ehcache的配置

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲述Hibernate中的二级缓存的配置,作者将使用的是ehcache缓存 一,目录   1.二级缓存的具体配置     1.1 ...

晨曦dawn
2018/06/05
0
0
Spring 3.1 版本的缓存实现

Spring3.1 已加缓存的实现,今天主要介绍一下Spring Cache的基本使用,要想使你的程序具体缓存的功能,首先需要在配置文件中增加以下配置: 1、如果使用Annotation 方式配置缓存,需要有以下...

小李飞刀008
2013/10/12
225
0

没有更多内容

加载失败,请刷新页面

加载更多

教你玩转Linux—添加批量用户

添加和删除用户对每位Linux系统管理员都是轻而易举的事,比较棘手的是如果要添加几十个、上百个甚至上千个用户时,我们不太可能还使用useradd一个一个地添加,必然要找一种简便的创建大量用户...

xiangyunyan
19分钟前
3
0
返回提示信息,如:xxx创建成功!

【服务端】在输出的方法块中,加入要输出的字段(qcm_batch_id) QCMUserType.cs: public struct QCM_Custom_Create_Batch_Out_Tag { public BASCoreType.Cmn_Out_T......

_Somuns
19分钟前
3
0
Aliyun Serverless VSCode Extension v1.12.0 发布

Aliyun Serverless VSCode Extension 是阿里云 Serverless 产品 函数计算 Function Compute 的 VSCode 插件,该插件结合了函数计算 Fun 工具以及函数计算 SDK ,是一款 VSCode 图形化开发调试...

阿里云官方博客
20分钟前
4
0
程序员如何培养解决复杂问题的能力?

今天在上网时候,突然看到了这篇文章,感觉非常的适合现在的自己去思考下,可能也适用在座的读者。程序员不仅仅是敲代码,更是一个复合能力的结合体,也不仅仅停留在技术和代码阶段。你想要成...

哥本哈根的小哥
23分钟前
6
0
市场变化驱动产品思维升级

宜信科技中心财富管理产品部负责人Bob,与大家一起聊聊个性化推荐产品功能的设计和B端产品的功能策划方式。 拓展阅读:回归架构本质,重新理解微服务 智慧金融时代,大数据和AI如何为业务赋能...

宜信技术学院
24分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部