本教程介绍了如何在 Nginx 上配置缓存模块和反向代理,以实现七牛云/OSS 储存图片的快速转发和缓存。通过这样的配置,可以通过自己网站流量走七牛云/OSS 储存图片资源,能省钱,服务器带宽快的还能提升用户的访问体验。
在我的服务器上,随着访问量增加,七牛云的钱也是大把大把的扣,刚好网站流量省得比较多,转发七牛云储存的图片不就可以了,我只获取一次后面的全部缓存到服务器上,后面访问的在服务器上获取就可以了。这样虽然可能会影响网站访问,但是能省钱。说干就干。

配置 nginx 缓存
在 Nginx 配置文件中添加以下配置,启用缓存:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:1024m inactive=2d;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_valid 200 60m;
以上代码中, /var/cache/nginx 是缓存文件存放的路径, my_cache 是缓存的名称, 1024m 表示缓存最多 1024m inactive=2d 表示如果在 2 天时间内没有请求,缓存将被删除, proxy_cache_valid 200 60m其中, code 是一个或多个 HTTP 状态码,表示只有返回指定状态码的响应才会被缓存; time 则是缓存的有效期,可以是一个时间值,也可以是一个字符串。在 proxy_cache_valid` 指令中,如果没有指定 HTTP 状态码,则缓存适用于所有状态码的响应。如果指定了状态码,则只有返回指定状态码的响应才会被缓存。
例如, proxy_cache_valid 200 60m 的意思是,缓存返回状态码为 200 的响应,有效期为 60 分钟。这意味着,如果 nginx 缓存中已经有了一个返回状态码为 200 的响应,并且这个响应的缓存时间还没有过期,那么下一次访问相同的 URL 时,nginx 会直接从缓存中返回这个响应,而不是向后端服务器请求数据。
需要注意的是, proxy_cache_valid 指令只对成功的响应(即状态码为 200~299)生效,对其他状态码的响应(如 404、500 等)不会生效。如果需要缓存其他状态码的响应,可以使用 proxy_cache_valid any 指令。
配置 nginx 反向代理
在 Nginx 配置文件中添加以下配置,启用反向代理:
location / {
proxy_pass http://<your-domain>/;
proxy_cache my_cache;
proxy_cache_bypass $http_pragma;
proxy_cache_revalidate on;
}
其中, <your-domain> 是你的待转发域名如(七牛云存储域名,OSS 储存域名)。 proxy_cache my_cache; 启用缓存, proxy_cache_bypass $http_pragma; 表示如果请求头中包含 Pragma,则不使用缓存, proxy_cache_revalidate on; 表示缓存过期时重新验证缓存。
测试
完成以上配置后,重启 Nginx,并测试是否成功转发七牛云/OSS 储存的图片并缓存到服务器上。在测试时,应该先访问一次该图片,以确保它被缓存到服务器上,然后再次访问该图片,以确保它是从服务器上获取的,而不是从七牛云/OSS 储存上获取的。访问一次图片后,服务器就生成对应缓存文件了。

通过以上步骤,你已经成功配置了 Nginx 缓存七牛云/OSS 储存图片转发,快不快取决于服务器带宽,最主要是能省钱。