将来的你
一定会感谢现在拼命努力的自己

为网站开启Nginx缓存加速,支持html伪静态页面

上一篇文章分享了如何开启 Nginx 的缩略图功能,也提到了 Nginx 缩略图在完美替代七牛缩略图或 PHP 缩略图的同时,还会带来一定的 CPU 负载消耗。

因此,本文就来分享一下如何解决这个实时生成缩略图带来的 CPU 开销问题。

思路很简单,既然你要实时生成,那我就将你生成的缩略图缓存一份好了!在我测试期间发现,Nginx 的缓存也同样可以缓存伪静态的 html 页面,完全可以替代 WP-Super-Cache 这类缓存插件了。相信大部分 CDN 也是用的这个原理,比如百度云加速,我们可以在 header 里面发现一个 “Server:yunjiasu-nginx”的标识。

好了,废话不说,一起来看看如何实现吧!

为网站开启Nginx缓存加速,支持html伪静态页面

一、代理模式

代理模式,即在使用 Nginx 反向代理时缓存指定内容,所用模块为 proxy_cache。这里网络上的很多教程会说,这个模式必须在反向代理中才能使用,说的好像不能用在只有一台服务器的情况似的。其实不然,我们用点小技巧,将 Nginx 本机的 80 端口代理转发到 本机的 8080 端口即可变相的开启反向代理模式,在这期间,就完全可以指定缓存内容了,且继续往下看!

①、下载模块

所用模块为 ngx_cache_purge,官方地址:http://labs.frickle.com/files/,我们可以挑选一个新版本下载到服务器上,比如 http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz

②、重新编译

所以先执行 -V 命令查看 Nginx 是否已经编译了该模块,

如果编译参数中找不到 ngx_cache_purge,就需要重新编译 Nginx ,新增编译参数:

我现在用的是淘宝开放的 Tengine ,可以使用动态加载模块功能,如果是原版 Nginx ,可以参考三叶运维之前分享的文章,在原来的基础上加上上述参数重新编译 Nginx 即可:

Nginx 在线服务状态下平滑升级或新增模块的详细操作记录

③、新增配置

A. 在 http 上下文中新增缓存配置:

Ps:上述配置中出现的目录,请在保存配置后,使用 mkdir 手动创建。

B. 如下修改网站原来的 server 模块:

B. 如下新增一个反向代理 Server 模块,用于转发请求到本地 8080,变相实现反向代理模式:

全部保存后,执行 nginx -s reload 让配置生效即可。现在你再去访问网站的 html 页面,刷新一次就可以看到效果了!加载速度绝逼会有质的飞跃!而且你可以在 F12 开发模式的 Network 状态中看到 Nginx-Cache HIT 的标识!

④、清理缓存

清理缓存就有点麻烦了,我弄了多次也还是感觉不怎么好用!网上也有不少先驱分享了自动清理脚本或批量清理代码等。不过用了下也是不咋的好用。

还是说一下清理方法吧!在 A 部分的配置中,我们已经加入了 purge 缓存清理页面,假设一个 URL 为 http://192.168.1.1/test.html,通过访问 http://192.168.1.1/purge/test.html 就可以清除该 URL 的缓存(我实际测试经常是 404...)。

二、本地模式

第一种代理模式,我们是利用本地转发变相实现反向代理下的 Nginx 缓存功能,并且可以缓存 html 伪静态页面。从整体的配置可以看出,已经非常接近百度云加速等 CDN 的缓存功能了!对于理解 CDN 缓存还是有不小的帮助的!

现在分享一下,如果不用反向代理模式,该如何实现 Nginx 缓存呢?很简单,进一步借助 ngx_slowfs_cache 模块即可,这也是三叶运维在用模式,如何实现,且继续往下看。

①、下载模块

这个模式需要下载 2 个缓存模块:ngx_cache_purge 和 ngx_slowfs_cache 。这 2 个模块都出自一个网站,下载地址依然是 http://labs.frickle.com/files/ ,挑选一个最新版下载即可,比如:

http://labs.frickle.com/files/ngx_slowfs_cache-1.9.tar.gz

②、重新编译

和第一种模式一样,新增 2 个 --add-module 重新编译 Nginx 即可:

具体就不赘述了,参考上文和博客之前的分享就可以搞定了。

③、新增配置

I. 在 http 上下文新增如下配置:

Ps:以上配置中所涉及的目录请手动创建。

II. 在 server 模块中新增如下配置:

保存后,执行 nginx -s reload 重载 Nginx 即可。测试中发现,这种模式貌似无法缓存 html 伪静态页面,稍有遗憾,有兴趣的童鞋可以深入研究看看,可能是我没测试到位。

三、惯例总结

好了,通过以上折腾,我们已经完美的解决了 Nginx 实时生成缩略图带来的 CPU 开销问题了!而且,从代理模式的缓存中,我们甚至可以缓存 html 伪静态页面,这意味着什么?强迫症们有可以无情的丢弃一款 WordPress 缓存插件啦!不过,三叶运维暂时还是使用自己写的 php 代码来实现静态缓存,没有别的,主要是为了方便管理。

总体来说,对于 Nginx 的缩略图和缓存,我还是非常满意的,喜欢折腾的朋友也可以亲自试试,也许你能找到比本文更多的经验呢!

赞(0) 打赏
声明:本站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,若涉及侵权请及时告知,将会在第一时间删除,联系邮箱:contact@3yyy.top。文章观点不代表本站立场。本站原创内容未经允许不得转载:三叶运维 » 为网站开启Nginx缓存加速,支持html伪静态页面
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏