如何配置Nginx的FastCGI缓存的响应体?

  

配置Nginx的FastCGI缓存来缓存响应体需要遵循以下步骤:

步骤一:安装Nginx
首先需要安装Nginx。具体安装过程这里不再赘述。

步骤二:配置FastCGI缓存
以下是一个配置示例:

http {
  # 定义FastCGI缓存路径
  fastcgi_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m;

  server {
      listen       80;
      server_name  example.com;

      location / {
          # 定义FastCGI缓存名称以及缓存配置项
          fastcgi_cache my_cache;
          fastcgi_cache_valid 200 60m;
          fastcgi_cache_methods GET HEAD;
          fastcgi_cache_bypass $http_pragma;
          fastcgi_cache_revalidate on;

          # FastCGI代理设置
          fastcgi_pass   127.0.0.1:9000;
          fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
          include        fastcgi_params;
      }
  }
}

在以上示例中,我们定义了FastCGI缓存路径和名称,并配置了缓存的有效期、缓存适用的请求方法、以及缓存验证和绕过规则。接下来我们将FastCGI缓存和Nginx服务器绑定,即在需要缓存响应的location块中添加fastcgi_cache指令。

步骤三:测试缓存效果
添加完配置后,需要测试是否正确地缓存了响应体。测试方法可以使用curl命令,如下:

$ curl -I http://example.com/
HTTP/1.1 200 OK
Server: nginx/1.17.6
Date: Mon, 25 Nov 2019 08:09:12 GMT
Content-Type: text/html
Content-Length: 12345
Last-Modified: Mon, 25 Nov 2019 08:05:08 GMT
Etag: "5ddaff5b-3039"
X-Cache-Status: MISS
Cache-Control: max-age=3600
Expires: Mon, 25 Nov 2019 09:09:12 GMT
Vary: Accept-Encoding
X-Backend-Server: backend.example.com

$ curl -I http://example.com/
HTTP/1.1 200 OK
Server: nginx/1.17.6
Date: Mon, 25 Nov 2019 08:09:38 GMT
Content-Type: text/html
Content-Length: 12345
Last-Modified: Mon, 25 Nov 2019 08:05:08 GMT
Etag: "5ddaff5b-3039"
X-Cache-Status: HIT
Cache-Control: max-age=3600
Expires: Mon, 25 Nov 2019 09:09:38 GMT
Vary: Accept-Encoding
X-Backend-Server: backend.example.com

可以看到,在第一次请求时,响应的头信息中X-Cache-Status为MISS,即未缓存。而在第二次请求时,X-Cache-Status则变为了HIT,响应体已经从缓存中读取。

另外一个示例,来自于Nginx官方文档,可以参考以下配置:

http {
    # 定义FastCGI缓存路径
    fastcgi_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m;
    fastcgi_cache_key "$scheme$request_method$host$request_uri";

    server {
        listen 80;
        server_name example.com;

        location / {
            # FastCGI代理设置
            fastcgi_pass   localhost:9000;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

            # 开启FastCGI缓存
            fastcgi_cache my_cache;

            # 缓存相关的配置项
            set $do_not_cache 0;
            if ($query_string) {
                set $do_not_cache 1;
            }
            if ($request_method != GET) {
                set $do_not_cache 1;
            }
            if ($http_cookie ~* "wordpress_logged_in_") {
                set $do_not_cache 1;
            }
            if ($do_not_cache = "0") {
                fastcgi_cache_valid 200 60m;
            }

            include         fastcgi_params;
        }
    }
}

在此示例中,我们同样定义了FastCGI缓存路径和名称,以及FastCGI缓存的key。同时,在location块中,使用set指令定义了缓存绕过条件,并在do_not_cache等于0时,设定了缓存的有效期fastcgi_cache_valid。

相关文章