为网站开启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 的缩略图和缓存,我还是非常满意的,喜欢折腾的朋友也可以亲自试试,也许你能找到比本文更多的经验呢!

发表评论

gravatar

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen:

刷新评论

目前评论:49   其中:访客  34   博主  15

  1. World 3 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市宝安区 电信

    沙发
    目前网站数据不大,还没有用到缓存来解决,收藏先! :grin:

  2. 华省省博客 1 来自天朝的朋友 谷歌浏览器 Windows 7 山东省菏泽市 联通

    有点臃肿了

    • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市 电信

      呵呵

  3. 微部落博客 4 来自天朝的朋友 谷歌浏览器 Windows 7 江苏省常州市 电信

    不错,可以提高网站速度,优化用户体验。。。

  4. Adrift 1 来自天朝的朋友 谷歌浏览器 Windows 8.1 山东省济南市 电信

    拿人嘴软,吃人手短,来冒个泡。。。

  5. 久闻网佳莉 4 来自天朝的朋友 谷歌浏览器 Windows 7 湖南省 电信

    反正我收藏啦

  6. 淘米纪 0 来自天朝的朋友 谷歌浏览器 Windows 7 四川省成都市 电信

    非常有技术性的文章,受教了,支持博主!!!

  7. 缅甸果博东方 0 来自天朝的朋友 谷歌浏览器 Windows XP 广东省湛江市 电信

    很实用,很详细,收了!

  8. 极品飞鸽 5 这家伙可能用了美佬的代理 谷歌浏览器 Windows 7 美国 圣安娜Krypt机房

    太会折腾啦,我们不会折腾的只能用更高的配置资源来换取啦

  9. 筛宝 2 来自天朝的朋友 谷歌浏览器 Windows 7 广东省中山市 联通

    确实不错。

  10. 西贝博客 4 来自天朝的朋友 Safari浏览器 Mac OS X 10_10_3 河南省 移动

    貌似是真的快了些。

    • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市 联通

      :evil: 你确定你用了?

      • 西贝博客 4 来自天朝的朋友 Safari浏览器 Mac OS X 10_10_3 河南省 移动

        我根本不懂技术,清理缓存已经是最大的技术含量了。。。 :evil:

      • 西贝博客 4 来自天朝的朋友 Safari浏览器 Mac OS X 10_10_3 河南省 移动

        http://zhangge.net/go/?url=http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz,下载被屏蔽,搞这么高端,不会了。。

        • 胡歌网摘 4 来自天朝的朋友 谷歌浏览器 Windows 7 广东省广州市 电信

          直接下载这个 http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz

          • 张戈 [博主] 来自天朝的朋友 Safari浏览器  Android 4.4.2 NX40X Build/KOT49H 广东省广州市 移动

            他这都不会,这篇文章建议最好不要折腾了,搞不好网站就挂了。。。

  11. wordpress优化 3 来自天朝的朋友 QQ浏览器 Windows 7 四川省成都市 电信

    用ngx_cache_purge就搞了,配合nginx helper插件更新缓存

    • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市 电信

      貌似非代理模式下不行吧?

      • wordpress优化 3 来自天朝的朋友 QQ浏览器 Windows 7 四川省成都市 电信

        可以的啊

        • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市 电信

          网站包括官方给出的配置都是走proxy_cache,不在反向代理区域用这个指令确认可以吗?能否贴一下你成功通过的配置?参考下。

          • wordpress优化 3 来自天朝的朋友 谷歌浏览器 Windows 7 四川省成都市 电信

            我是参考http://jybb.me/nginx-wordpress-fastcgi_cache-purge搞得

            • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市 电信

              好东西,感谢分享,待会就试试。

              • wordpress优化 3 来自天朝的朋友 谷歌浏览器 Windows 7 四川省成都市 电信

                搞成了吗?速度快了不少

                • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市 联通

                  已实施,感谢分享。

              • wordpress优化 3 来自天朝的朋友 谷歌浏览器 Windows 7 四川省成都市 电信

                你这回复没刷新缓存啊

                • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市 联通

                  还有一层百度CDN缓,点击评论上的刷新按钮才能刷新。

              • wordpress优化 3 来自天朝的朋友 谷歌浏览器 Windows 7 四川省成都市 电信

                不知道能不能分享下你的PHP优化代码(定制版)】

              • wordpress优化 3 来自天朝的朋友 谷歌浏览器 Windows 7 四川省成都市 电信

                求份PHP优化代码(定制版),可以分享下不?

                • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市 联通

                  有Nginx缓存没必要在用php缓存html了。
                  代码在我博客就有分享:http://zhangge.net/4769.html

                  • wordpress优化 3 来自天朝的朋友 谷歌浏览器 Windows 7 四川省成都市 电信

                    压缩

                    • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市 联通

                      兄弟,多用用站内搜索
                      站内搜索下 压缩 不就有了??

                    • 聚宝盒 2 来自天朝的朋友 谷歌浏览器 Windows 7 福建省厦门市思明区 联通

                      这个嵌套真有意思,。

                    • 那樊笼 1 来自天朝的朋友 QQ浏览器 Windows 10 四川省成都市双流县 电信

                      我也来嵌套一下~

  12. 微部落博客 4 来自天朝的朋友 谷歌浏览器 Windows 7 江苏省常州市 电信

    这个对提高网站速度和用户体验不错哦

  13. iEdon 1 来自天朝的朋友 谷歌浏览器 Windows 8.1 北京市 北京电信互联网数据中心

    多级嵌套评论好恐怖啊

  14. iEdon 1 来自天朝的朋友 谷歌浏览器 Windows 8.1 江苏省常州市 常州大学教育网

    使用后nginx起不来了
    Segmentation fault

    • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市 联通

      试下最新的教程:http://zhangge.net/5042.html

  15. 支付宝借条 2 来自天朝的朋友 搜狗浏览器 Windows 7 广东省深圳市 电信

    确实挺深的!

  16. god 4 来自天朝的朋友 谷歌浏览器 Windows 7 陕西省西安市 电信

    第一次搞这个 在编译的时候显示 no such file or directory 应该进到哪开始编译啊,/usr/local/nginx/这里吗

  17. 小幻 5 来自天朝的朋友 谷歌浏览器 Windows 7 北京市 北京数据家科技有限公司电信节点

    编译失败怎么说。。。

  18. deson 2 来自天朝的朋友 谷歌浏览器 Windows 10 广东省深圳市龙岗区 电信

    博主你好,我也是tengine 为什么我编译后 还是没有加载执行 ./configure –add-module=../ngx_cache_purge-2.3 后还是没有加载 ngx_cache_purge模块呢。。。。。多谢。。

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

      configure–>make–>make install

      • deson 2 来自天朝的朋友 谷歌浏览器 Windows 10 广东省深圳市龙岗区 电信

        没搞定。。按照这个步骤,你现在还是用的tengine吗,ngx_cache_purge 可以装上 但是tengine就启动不了,,好像执行make install cp几个文件默认全部到nginx文件夹,复制覆盖到tengine 目录也不行。

        • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_3 广东省 电信

          大概知道为什么了,你编译的时候不能照搬文章参数,除了 那个 –add-module=../ngx_cache_purge-2.3 之外,其他的参数必须延续之前的 参数,比如安装路径! 你要是生搬硬套使用了–prefix=/usr/local/nginx,而实际路径是 /usr/local/tengine,肯定启动不了!实在不行,全部重新安装,先备份下配置文件即可。

  19. 晨夜 2 来自天朝的朋友 谷歌浏览器 Windows 7 湖南省长沙市 联通

    tengine如何编译呢?

    • 张戈 [博主] 来自天朝的朋友 Safari浏览器  Android 5.1.1 Redmi Note 3 Build/LMY47V 广东省深圳市 电信

      和nginx一模一样的编译

  20. webx32 0 来自天朝的朋友 谷歌浏览器 Mac OS X 10_12_1 浙江省杭州市 电信

    收藏

  21. make 0 来自天朝的朋友 谷歌浏览器 Windows 10 重庆市 电信

    make: *** No rule to make target build', needed by default’. Stop.
    按照你这个编译,出错…

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_3 广东省广州市 电信

      编译语句,源码目录结构是什么样的?

加载中,请稍候...