Skip to content

61 Nginx配置fastcgi_cache

Jinxin Chen edited this page Dec 11, 2019 · 1 revision

Nginx除了可以使用代理层缓存之外,还可以使用FastCGI缓存,并且支持ngx_cache_purge模块来清理缓存

http模块配置

fastcgi_cache_path                /data/nginx/cache/factcgi_cache levels=1:2 keys_zone=php:512m inactive=1d max_size=1g use_temp_path=off;

fastcgi_cache_path 参数说明:

  • levels:目录层级,1:2表示2层目录结构存储,比如:/data/nginx/cache/factcgi_cache/c/29/b7f54b2df7773722d382f4809d65029c
  • keys_zone:缓存key的共享内存区,1m可以存储8千个key
  • inactive:缓存有效时间,如果经过该时间还没有被访问到,则删除该缓存
  • max_size:缓存数据最大大小
  • use_temp_path:是否将数据先写入临时文件(proxy_temp_path),再写入缓存目录

fastcgi_cache配置

location ~ \.php$ {
    # php
    try_files $uri /index.php =404;
    fastcgi_pass php-upstream;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;

    # cache
    fastcgi_cache php;
    fastcgi_cache_valid 200 1h;
    fastcgi_cache_key  "$scheme$request_method$host$request_uri";
    fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
    add_header cache-status $upstream_cache_status;
    if ($request_uri ~* "admin/") {
        set $skip_cache 1;
    }
    fastcgi_cache_bypass $skip_cache;
    # add_header remote_addr $remote_addr;
    # add_header cache-key "$scheme$request_method$host$request_uri";
}

location ~ /purge(/.*) {
    allow 192.168.0.0/24;
    deny all;
    fastcgi_cache_purge php "$scheme$request_method$host$1";
}

参数说明:

  • fastcgi_cache:指定使用哪个共享内存区缓存数据
  • fastcgi_cache_key:缓存文件key,默认为完整的URL
  • fastcgi_cache_valid:为不同的响应状态码设定缓存,如果只设定时间,则 200, 301, 302 都将同时被缓存
  • fastcgi_ignore_headers :禁止代理服务器处理请求头,避免被Expires Cache-Control等参数影响缓存有效性。
  • add_header cache-status $upstream_cache_status : 在响应头添加缓存命中状态,方便调试。
  • fastcgi_cache_bypass:不为"0"的字符串就表示不缓存该内容。示例中,对于admin页面的内容,不做缓存。

对于缓存清理模块的allow ip用的是子网掩码的表示方式,24表示32位IP地址的前24位都为1,所以192.168.0.0/24的IP地址范围为:

192.168.0.0~192.168.0.255

参考:

Clone this wiki locally