Nginx 配置 fastcgi cache
来源:51reboot     阅读:478
云上智慧
发布于 2019-08-22 00:13
查看主页

尝试 Ghost (https://tlanyan.me/ghost-experience/)中提到过托管博客的 VPS 因为内存不足导致服务宕机。今天意识到可以通过 Nginx 缓存避免请求落到 PHP 和 MySQL 端,提升整体性能。此外博客发布后很少改动,读多写少,是使用缓存(或者静态化)的好场景。

缓存机制

Nginx 提供了基于代理商 (proxy) 和基于 fastcgi 的两种缓存方式,两者指令集十分类似,使用上差别不大。因为本站博客采用 Nginx+PHP-FPM 架构,故而使用基于 fastcgi 的缓存,即 fastcgi cache。

配置

fastcgi cache 的机制是将后台 CGI 服务返回的页面缓存起来,后续请求到来时直接返回页面,省去与后台服务通信及生成页面的消耗。fastcgi cache 与squid、varnish、CDN 等原理相似,因为减少了后台请求,准则上性能会比WordPress 的各种缓存插件高出许多。

fastcgi cache 隶属于 fastcgi 板块,而 fastcgi 板块又归属于 http 板块,所以与缓存相关的配置应当都出现在这两个及下属配置块中(主要是 http, server 和 location)。

根据官方文档,博客站点采用的缓存配置如下:

http { ... fastcgi_connect_timeout 30s; # 全局设置, fastcgi_cache_path只能出现在http配置块中 # fastcgi_cache_path设置全局的缓存路径、文件大小等,可屡次出现设置不同的缓存池 fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=WORDPRESS:10m inactive=10m max_size=500m; fastcgi_cache_key $scheme$request_method$host$request_uri; # 设置使用过期缓存的情形:后台错误、超时等 fastcgi_cache_use_stale error timeout invalid_header http_500 http_503; ... server {   ...   # 缓存策略指示变量   set $skip_cache 0;   # 缓存策略   if ($query_string != "") {     set $skip_cache 1;   }   if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|sitemap(_index)?.xml") {     set $skip_cache 1;   }   # 登录客户或者发表评论者   if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {     set $skip_cache 1;   }   location ~ \.php$ {     ...     # 使用的keyzone,这里使用http中定义的WORDPRESS     fastcgi_cache WORDPRESS;     # 能否跳过缓存     fastcgi_cache_bypass $skip_cache;     fastcgi_no_cache $skip_cache;     # 后台返回成功的情况下缓存10分钟     fastcgi_cache_valid 200 10m;     # 增加header字段,指示缓存命中状态(调试使用)     add_header X-Cache $upstream_cache_status;   } }}

上述配置做了以下工作:

  1. 设置缓存池信息 (fastcgi_cache_path);

  2. 设置缓存 key(fastcgi_cache_key);

  3. 过期文件解决 (fastcgi_cache_use_stale)

  4. 缓存策略(fastcgi_cache_bypass/fastcgi_no_cache)

  5. 后台请求成功时缓存时间(fastcgi_cache_valid)

  6. 添加了调试信息头 (add_header)

重启 Nginx,而后访问页面,查看页面的 header 状态和响应时间。可以看到,请求一次过后(次数可通过 fastcgi_cache_min_uses 设置),后续请求都从缓存请求(X-Cache 值为 HIT),速度提升非常显著。对于管理后端页面,x-cache 的值为 BYPASS,正是我们需要的。

其余

开源版的 Nginx 不能自动清理缓存,当文章变动或者者有新评论时不能立即升级页面。要达到此目的,可使用商业版 Nginx 或者者通过开源插件处理,介绍查看此文(https://www.mf8.biz/wordpress-fastcgi-cache/)。

参考

  1. http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html

  2. https://www.mf8.biz/wordpress-fastcgi-cache/

出处:https://tlanyan.me/nginx-config-fastcgi-cache/

声明通知

第20期 Python零基础入门班

51Reboot 第20期 Python 零基础运维自动化【入门班】正在火热招生中

想要理解介绍请扫码咨询,备注“来源简书”
免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 服务器应用
相关推荐
redux入门
JavaScript人脸检测的实现方法
做前台程序员能在一线城市买上房?出两道题考考你
使用node时,get到几个方便开发的小技巧
基于Typescript的全栈工程模版 - 后台 Node.js + Koa2
首页
搜索
订单
购物车
我的