最近我们上线的项目使用到了图片服务器,因此这里的话,我们所有的图片等文件都是存储在minio上的。前端使用nginx进行代理,访问的时候使用pic.xxx.com的方式进行访问,配置的nginx信息如下:
如果是这个样子的话,那么每次访问图片的话,都需要去请求一遍minio后端服务,因此这里的话,我们使用下nginx本地的缓存,当nginx本地缓存没有的话,我们再去后端的minio访问。
这里的话我们就要使用上nginx的proxy_cache,这是nginx内置的一个缓存系统,下面我们配置下:
1)首先在服务器上创建一个临时文件夹,放置缓存到本地的文件,例如:
#创建放置缓存文件的临时文件夹 mkdir -p /www/nginxtempfile
2)在nginx.conf文件夹配置当前的缓存路径
这里的话,我们配置的路径应该是在nginx.conf下,非vhost.conf,并且需要把如下的配置信息配置到ngixn的http{}节点里面。配置信息如下:
proxy_cache_path /www/nginxtempfile levels=1:2 keys_zone=ngxcache:2m inactive=7d max_size=2m use_temp_path=off;
配置示例图如下:
这里解释一下这个参数:
proxy_cache_path 对应的事缓存的临时目录,需要nginx有写入这个目录的权限 levels 这个直接统一1:2即可,代表的是生成2级目录 keys_zone 表示共享缓存空间的名字,后面是大小表示共享缓存初始大小 inactive 指定的时间内未被访问,就会被从缓存中移除 max_size 缓存到本地临时目录文件的总大小,超过当前大小,则会根据lru算法把多余的文件给删除掉,这个值根据实际情况进行调整即可。但是一定要设置,避免缓存文件把本地硬盘给撑爆了 use_temp_path 如果为 off,则 nginx 会将缓存文件直接写入指定的 cache 文件中,而不使用 temp_path 指定的临时存储路径。所以一般都为off
3)在对应的pic域名里面配置启用缓存
这里的话,我们需要回到pic对应的vhost.conf里面进行配置,在对应的访问里面添加上如下的配置即可:
#启用缓存,对应前面的keys_zone proxy_cache ngxcache; #设置在哪些返回码进行缓存 proxy_cache_valid 200 304 5m; proxy_cache_valid 301 302 2m; #被访问多少次后才缓存,默认为1 proxy_cache_min_uses 1; # 添加一个响应头,用来标识请求是否命中缓存 add_header N-Cache-Status $upstream_cache_status; # 指定head或者get请求的时候才缓存 proxy_cache_methods GET HEAD; # 指定缓存的key根据什么生成,这里设置的样例是: https://pic.xxx.com/aaaa.jpg proxy_cache_key $scheme$proxy_host$request_uri; # 允许在某种条件下返回请求时使用过期的缓存数据 proxy_cache_use_stale error timeout invalid_header updating http_502 http_503 http_504; # 多条相同url请求未命中缓存时,nginx只发送一条请求到后端 proxy_cache_lock on; # 缓存未命中等待超时后,所有未命中的url请求都会转到后端 proxy_cache_lock_timeout 10; # 即便有Vary、Set-Cookie的响应头操作,依然使用缓存 proxy_ignore_headers Vary Set-Cookie;
具体的配置示例图如下:
然后我们重新加载下nginx的配置,访问下图片,就可以看到图片被缓存到本地了:
同时我们多访问几张图片,可以看到临时文件目录的总大小都控制在设置的2m以内:
备注:
1、磁盘的max_size一定要配置,避免把服务器磁盘撑满了。
2、max_size这里演示的时候才设置的2m,实际环境中根据实际情况来进行操作。
还没有评论,来说两句吧...