如何配置Nginx的FastCGI缓存的HTTP头?

  • Post category:Linux

要配置 Nginx 的 FastCGI 缓存的 HTTP 头,首先需确保 Nginx 已经安装并启动。然后,需要进行以下步骤:

  1. 配置 FastCGI 缓存

编辑 Nginx 的配置文件,通常是 /etc/nginx/nginx.conf/etc/nginx/conf.d/default.conf,添加以下部分:

fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

这段代码的作用是设置了一个 FastCGI 缓存区,缓存范围是 /var/cache/nginx 下的 1 级目录,2 级目录,缓存时间默认为 60 分钟(1 小时),并设置了缓存 key。

  1. 缓存 HTTP 头

需要在 FastCGI 缓存区设置头信息来缓存 HTTP 头。

添加以下代码块到 Nginx 的配置文件:

add_header X-Cache $upstream_cache_status;
add_header Cache-Control "public, max-age=3600";
add_header Last-Modified "$date_gmt";
expires 1h;

上述代码中,X-Cache 设置了返回值的缓存状态,Cache-Control 设置了缓存控制(缓存 1 小时),Last-Modified 显示最后一次修改的时间,并且expires 1h 告诉浏览器文件应该在 1 小时后过期。

示例 1:

server {
  listen 80;
  server_name www.example.com;

  location / {
    # 设置 FastCGI 缓存
    fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
    fastcgi_cache_key "$scheme$request_method$host$request_uri";

    # 设置头信息
    add_header X-Cache $upstream_cache_status;
    add_header Cache-Control "public, max-age=3600";
    add_header Last-Modified "$date_gmt";
    expires 1h;

    # FastCGI 缓存指令
    fastcgi_cache my_cache;
    fastcgi_cache_valid 200 60m;
    fastcgi_cache_bypass $http_pragma;
    fastcgi_cache_revalidate on;
    fastcgi_cache_min_uses 1;
    fastcgi_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;

    # FastCGI 代理
    fastcgi_pass unix:/var/run/fastcgi.sock;
    fastcgi_index index.php;
    include fastcgi_params;
  }
}

以上代码块设置了一个 FastCGI 缓存区,并且添加了 HTTP 头信息缓存,同时定义了 FastCGI 缓存指令和 FastCGI 代理。当请求到达 fastcgi_cache 指令时,Nginx 会检查缓存,如果有缓存则会直接返回缓存内容,并在 HTTP 头信息中添加 X-Cache 等信息。

示例 2:

server {
  listen 80;
  server_name www.example.com;

  location / {
    # 设置 FastCGI 缓存
    fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
    fastcgi_cache_key "$scheme$request_method$host$request_uri";

    # 设置头信息
    add_header X-Cache $upstream_cache_status;
    add_header Cache-Control "public, max-age=3600";
    add_header Last-Modified "$date_gmt";
    expires 1h;

    # FastCGI 缓存指令
    fastcgi_cache my_cache;
    fastcgi_cache_valid 200 60m;
    fastcgi_cache_bypass $http_pragma;
    fastcgi_cache_revalidate on;
    fastcgi_cache_min_uses 1;
    fastcgi_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;

    # FastCGI 代理
    fastcgi_pass unix:/var/run/fastcgi.sock;
    fastcgi_index index.php;
    include fastcgi_params;
  }

  location /admin/ {
    # 管理员页面无缓存
    fastcgi_cache_bypass 1;
  }
}

以上代码块是对示例 1 中添加一个管理员页面的处理,因为管理员可能需要实时更新和编辑页面,所以在此处设置了无缓存。