一台云服务器Windows篇:10、Nginx Web 缓存服务

fastcgi_cache:在WordPress中应用

Nginx Web 缓存服务

Nginx只能为指定URL或状态码设置过期时间,不支持类似Squid的PURGE指令手动清除缓存;虽然可以通过Nginx的模块ngx_cache_purge,来自动清除指定URL的缓存。但ngx_cache_purge是nginx的一个三方模块,主要是对nginx生产的缓存内容进行清理,是需要自行编译后,才能支持。linux apt或都是Win版本,都是默认没有编译进去的,另外,wordpress有配套Nginx Helper 插件,所以本文不涉及ngx_cache_purge内容。

  1. proxy_cache:缓存后端服务器的内容,可能是任何内容,包括静态的和动态,减少了nginx与后端通信的次数,节省了传输时间和后端宽带
    1. nginx proxy_cache缓存详解 – archer-wong – 博客园
  2. fastcgi_cache:缓存fastcgi生成的内容,很多情况是php生成的动态的内容,少了nginx与php的通信的次数,更减轻了php和数据库(mysql)的压力,这比用memcached之类的缓存要轻松得多。
    1. 【nginx】关于fastcgi_cache – 踏雪无痕SS – 博客园
    2. 配置 Nginx FastCGI 缓存:全面提升网站加载速度 – Kevin’s

fastcgi_cache:在WordPress中应用

配置之后,页面首次访问0.5s左右,关闭再次访问只需要15ms以内了。注意:不会在后台管理页面里应用缓存。

缓存路径准备

# Linux
sudo mkdir -p /data/www/nginxCache/blog.t725.cn
sudo chown -R www-data:adm /data/www/nginxCache/blog.t725.cn
sudo chmod -R u=rwx,g=rx,o=rx /data/www/nginxCache/blog.t725.cn

Windows:创建C:/tmp/nginxCache/blog.t725.cn目录,此目录需要nginx进程,有读写的NTFS权限。

Nginx配置

在http、server、location中,加入fastcgi_cahe配置。

    http

        # Context:http,fastcgi_cache start.
        # 如果有多个站点,复制fastcgi_cache_path行,改path与keys_zone中的y.z;官方文档:https://nginx.org/en/docs/http/ngx_http_fastcgi_module.html
        fastcgi_cache_path C:/tmp/nginxCache/blog.t725.cn levels=1:2 keys_zone=blog.t725.cn:16m inactive=3d max_size=5G; # keys_zone最大占用内存16M,而1MB zone可以存储大约 8000 个key;inactive是过期时间3天,缓存最大占用空间5G
        # Context:http,fastcgi_cache end.

    server

        ##
        # Context:server,fastcgi_cache start.
        ##
        set $skip_cache 0; # 缓存获取策略:0为启用,1为禁用;
        if ($request_method = POST) {
            set $skip_cache 1;
        }
        if ($query_string != "") {
            set $skip_cache 1;
        }
        if ($request_uri ~ "/wp-admin/|/xmlrpc.php|/phpInfo.php|wp-.*.php|/feed/|sitemap(_index)?.xml") { # wordpress 后台
            set $skip_cache 1;
        }
        if ($http_cookie ~ "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") { # wordpress 登录用户或发表评论者
            set $skip_cache 1;
        }
        fastcgi_cache_key "$scheme$request_method$host$request_uri"; # 这三行,支持配置在 http/server/location 区域
        fastcgi_cache_use_stale error timeout invalid_header http_500; # FastCGI服务器在哪些情况下,nginx可以使用过时的缓存响应
        fastcgi_ignore_headers Cache-Control Expires Set-Cookie; # 不改变FastCGI服务器响应的标头字段
        # Context:server,fastcgi_cache end.

    location

            ##
            # Context:location,一般是【~ \.php$】,fastcgi_cache start.
            ##
            fastcgi_cache blog.t725.cn; # 使用的keyzone,这里使用http中定义的y.z
            fastcgi_cache_bypass $skip_cache; # 值为1,不从缓存中获取
            fastcgi_no_cache $skip_cache; # 值为1,不保存响应(即不缓存内容)
            fastcgi_cache_valid 200 3d; # 后端返回200(成功),缓存3天
            add_header X-Cache $upstream_cache_status; # 调试使用:添加header字段,指示缓存命中状态;MISS:缓存未命中,HIT:缓存命中,BYPASS:规则排除的不缓存
            # Context:location,fastcgi_cache end.

     WordPress配置:通过插件负责清理nginx缓存

    1. wp-config.php中添加:(需要重启wordpress生效)
    define( 'RT_WP_NGINX_HELPER_CACHE_PATH','C:/tmp/nginxCache/blog.t725.cn');
    1. 安装 Nginx Helper 插件,在没有自行编译ngx_cache_purge环境里(与OS无关),只能使用Delete local server cache files 方式。
      1. 如果没有出现Purge Method配置,在Caching Method中切换点击一下就可以了。
    clip_image002[4]

    proxy_cache:在反向代理中应用

    一般在跨主机的反向代理,或负载均衡的场景上,但这些场景也可以做动静分离配置,将静态内容也发布到Nginx上,也可以加快速度。

    如果是单机nginx,也不是反向代理时,就不用考虑动静分离+静态缓存了,因为 Nginx + 现代浏览器+现代开发规范 的结合支持下,静态资源变化直接改文件名(fileName-Hash.xxx)+浏览器直接从本地缓存读取(Chrome 54新版刷新机制)。

    <待续>

    动静分离应用

    <待续>

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注