资讯专栏INFORMATION COLUMN

Nginx配置fastcgi cache

王陆宽 / 740人阅读

摘要:配置的机制是将后端服务返回的页面缓存起来,后续请求到来时直接返回页面,省去与后端服务通信及生成页面的消耗。隶属于模块,而模块又归属于模块,所以与缓存相关的配置应当都出现在这两个及下属配置块中主要是和。

转载请注明文章出处:https://tlanyan.me/nginx-conf...

在尝试Ghost中提到过托管博客的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;
    }
  }
}

上述配置做了以下工作:

设置缓存池信息(fastcgi_cache_path);

设置缓存key(fastcgi_cache_key);

过期文件处理(fastcgi_cache_use_stale)

缓存策略(fastcgi_cache_bypass/fastcgi_no_cache)

后端请求成功时缓存时间(fastcgi_cache_valid)

增加了调试信息头(add_header)

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

其他

开源版的Nginx不能自动清除缓存,当文章变动或者有新评论时不能立即更新页面。要达到此目的,可使用商业版Nginx或者通过开源插件解决,详情查看此文。

参考

http://nginx.org/en/docs/http...

https://www.mf8.biz/wordpress...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40062.html

相关文章

  • 高并发中nginx较优的配置

    摘要:指令中的参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在时间内一次没被使用,它将被移除。 一、这里的优化主要是指对nginx的配置优化,一般来说nginx配置文件中对优化比较有作用的主要有以下几项: nginx进程数,建议按照cpu数目来指定,一般跟cpu核数相同或为它的倍数。 worker_processes 8; 为每...

    马永翠 评论0 收藏0
  • 高并发中nginx较优的配置

    摘要:指令中的参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在时间内一次没被使用,它将被移除。 一、这里的优化主要是指对nginx的配置优化,一般来说nginx配置文件中对优化比较有作用的主要有以下几项: nginx进程数,建议按照cpu数目来指定,一般跟cpu核数相同或为它的倍数。 worker_processes 8; 为每...

    peixn 评论0 收藏0
  • Apache 与 Nginx 性能对比:Web 服务器优化技术

    摘要:服务器市场份额。子进程负责创建由指令设置的服务器线程,同时还负责监听接收到的请求,并将请求分发给处理线程。在版本引入了模块,这个模块基于模块创建的,并加入了独立的监听线程来管理请求处理完成后的休眠的连接。基于事件的服务器完胜。 译文首发于 Apache 与 Nginx 性能对比:Web 服务器优化技术,转载请注明出处。 多年前 Apache 基金会 Web 服务器 简称「Apache」...

    shadowbook 评论0 收藏0
  • Apache 与 Nginx 性能对比:Web 服务器优化技术

    摘要:服务器市场份额。子进程负责创建由指令设置的服务器线程,同时还负责监听接收到的请求,并将请求分发给处理线程。在版本引入了模块,这个模块基于模块创建的,并加入了独立的监听线程来管理请求处理完成后的休眠的连接。基于事件的服务器完胜。 译文首发于 Apache 与 Nginx 性能对比:Web 服务器优化技术,转载请注明出处。 多年前 Apache 基金会 Web 服务器 简称「Apache」...

    wangbjun 评论0 收藏0
  • nginx(三):反向代理篇

    摘要:反向代理模块何为反向代理接收客户端请求,并把请求交给后端服务器处理,后端服务器处理完成后,响应通过反向代理服务器返回给客户端。作为反向代理服务器经常要配置一组服务器,以实现负载均衡。 1、nginx反向代理模块 何为反向代理?接收客户端请求,并把请求交给后端服务器处理,后端服务器处理完成后,响应通过反向代理服务器返回给客户端。反向代理可实现局域网中的服务器可被公网中的客户端访问,也可实...

    cloud 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<