配置Nginx的FastCGI缓存的HTTP响应头,需要以下步骤:
- 安装Nginx和FastCGI缓存模块
确保已经安装了Nginx,并且有FastCGI缓存模块。可以使用以下命令检查:
nginx -V
FastCGI缓存模块名为ngx_http_fastcgi_cache_module,如果没有则需要重新编译安装Nginx。
- 配置FastCGI缓存
打开Nginx配置文件,一般位于/etc/nginx/nginx.conf,找到http块,在其中添加以下内容:
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
其中,/var/cache/nginx是FastCGI缓存的存储路径,levels=1:2表示使用两级目录存储缓存文件,keys_zone=my_cache:10m指定缓存区名字和大小,inactive=60m表示一小时内没有访问的缓存文件将被删除。
- 配置FastCGI缓存参数
在server块中添加以下内容:
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_valid 200 302 10m;
fastcgi_cache_valid 404 1m;
fastcgi_cache_bypass $http_pragma;
fastcgi_cache_revalidate $http_cache_control;
其中,fastcgi_cache_key指定了缓存的键名,建议使用”$scheme$request_method$host$request_uri”来唯一标示请求;fastcgi_cache_valid指定了不同响应码的缓存有效期,200和302响应码的缓存有效期为10分钟,404响应码的缓存有效期为1分钟;fastcgi_cache_bypass和fastcgi_cache_revalidate分别指定了缓存的条件,如果请求头中含有Pragma字段则不使用缓存,如果请求头中含有Cache-Control字段则根据其值来决定是否使用缓存。
- 配置FastCGI缓存的HTTP响应头
在server块中添加以下内容:
add_header X-Cache-Status $upstream_cache_status;
add_header Cache-Control "public, max-age=7200";
add_header Expires "Tue, 01 Jan 2030 00:00:00 GMT";
其中,add_header用于添加HTTP响应头,X-Cache-Status返回缓存状态,$upstream_cache_status是Nginx的变量,包含了缓存的状态;Cache-Control指定了缓存控制,public表示响应可以被缓存,max-age指定了缓存的最大有效期;Expires指定了过期时间。
示例1:仅对特定URL缓存,其他URL不缓存
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache my_cache;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
add_header X-Cache-Status $upstream_cache_status;
add_header Cache-Control "public, max-age=7200";
add_header Expires "Tue, 01 Jan 2030 00:00:00 GMT";
if ($request_uri != "/cache-this-url") {
proxy_cache_bypass 1;
}
}
}
上述例子中,Nginx将只会对URL为/cache-this-url的请求进行缓存,其他请求将跳过缓存直接向后端服务器请求数据。
示例2:对所有URL缓存,但不缓存登录用户的请求
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache my_cache;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
add_header X-Cache-Status $upstream_cache_status;
add_header Cache-Control "public, max-age=7200";
add_header Expires "Tue, 01 Jan 2030 00:00:00 GMT";
if ($http_cookie ~* "sessionid") {
proxy_cache_bypass 1;
}
}
}
上述例子中,Nginx将会对所有请求进行缓存,但是会排除登录用户的请求,这是通过匹配请求头中的Cookie实现的,如果请求头中包含名为sessionid的Cookie,则跳过缓存。