因为我的图床的请求和流量费用比较高,且有安全风险,所以我一般是服务器反代了我的图床。但是我发现即使我反代了我的图床,我的图床请求量和流量每天还是挺高。一开始我以为是有一些没有缓存,比较冷门的图还被第一次访问,但是用了好几个月还是每天几万请求。后来我意识到一件事情:可能缓存没有保存下来被清理了。

即使我的缓存已经设置了保存10年,但是nginx的缓存却根据proxy_cache_path的配置来。包括缓存路径和存储最大值、存储时间、多少天没有访问就删除。

我看到宝塔默认的规则是这样的:

1
proxy_cache_path /www/server/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:20m inactive=1d max_size=5g;

proxy_cache_path:定义缓存文件存储路径和缓存参数。

/www/server/nginx/proxy_cache_dir:指定缓存文件存储的目录。

levels=1:2:定义缓存目录的层级结构。1:2表示第一层使用一个字符的子目录,第二层使用两个字符的子目录。这样可以避免单个目录下文件过多,提高文件系统性能。

keys_zone=cache_one:20m:定义一个共享内存区域,用于存储缓存键及元数据。cache_one是这个区域的名称,20m表示共享内存区域的大小为20MB。

inactive=1d:指定缓存条目在多长时间未被访问后过期并从缓存中移除。1d表示1天。

max_size=5g:指定缓存使用的最大存储空间。5g表示5GB。

我应该就是触发了inactive=1d这个东西,一些冷门图片可能无法维持每天都有人看的情况,所以每次访问都被请求。

知道了原理,我们就可以很轻松的给每一个站点设置单独的缓存空间啦!这里以我的图床为例:

修改主要的nginx配置文件

我们使用宝塔文件访问/www/server/nginx/conf/proxy.conf这个文件。

我们可以看到这个proxy-cache_path,默认就是我前面说的那条。

参数

我们新建一条,在原有的proxy-cache_path下面另开一行,发一下我的配置:

1
proxy_cache_path /www/wwwroot/p.zhheo.com/cache levels=1:2 keys_zone=cache_p:50m max_size=10g inactive=1y use_temp_path=off;

这里我们可以把对应地址的/www/wwwroot/p.zhheo.com/cache改成你要缓存的位置,我是推荐直接存在网站目录下比较好。其他参数都是尽可能延长存储时间。比如最大存储量为10g,没人访问的缓存保存一年等等。

keys_zone=cache_p这个也需要修改,我们需要起一个名字,比如cache_p是我为这个缓存起的名字,这个后面会用到。

修改站点nginx配置文件

在侧边选择站点,配置站点配置文件。

配置文件

我们在开启缓存的情况下修改配置文件,找到这个proxy_cache,它对应的值就是你刚才起的名字。我起的名字是cache_p

配置文件修改

重启nginx

首页或者应用商店找到nginx管理面板,然后点击重启或者重载配置。

重载配置

大功告成

你成功的将缓存文件存到指定的目录,这样就不用担心缓存会被错误的删除啦!