运维实战:FastCGI相关调优

本文详细介绍了如何在Nginx中配置FastCGI缓存,以提升动态页面加载速度,改善用户体验。通过具体环境设置和代码示例,讲解了FastCGI缓存路径、缓存有效时间等关键参数的配置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运维实战:FastCGI相关调优


作用

        可以缓存fastcgi生成的内容,很多情况是php生成的动态的内容。简单来说就是将动态页面缓存到内存或者硬盘上,如果符合条件则直接读取缓存,不再与PHP 通信,可以提升访问速度,提高用户体验。一般而言用户在打开网页速度在1-2s体验是非常好的,其页面中包含其他的资源慢一些都是可以接受。

环境介绍

服务器IP

Nginx版本

域名

192.168.123.36

Nginx1.6.3

www.test.com

                                                                                      图 1. 基本环境

FastCGI cache配置

         1.nginx.conf配置

user  www www;
worker_processes  8;
worker_rlimit_nofile 51200;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
events {
    worker_connections  40960;
    use epoll;
}
http {
    charset utf-8;
    include       vhosts/*.conf;
    include       mime.types;
    default_type  application/octet-stream;
    sendfile    on;
    tcp_nodelay on;
    tcp_nopush on;
    send_timeout 60;
    client_max_body_size 8m;
    keepalive_timeout  60;
    server_tokens off;
    log_format main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    fastcgi_cache_path /cache/fastcgi_cache levels=1:2 keys_zone=CGI_Cache:10m inactive=5m max_size=1g;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    add_header X-via $server_addr;
    add_header X-Cache $upstream_cache_status;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;
    server_names_hash_max_size 4096;
    server_names_hash_bucket_size 2048;
    
    gzip off;
    gzip_min_length 1k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types text/css application/javascript text/xml;
    error_log logs/error.log error;
    
    server {
      listen 80 default;
      return 444;
    }
server {
    listen       80;
    server_name  www.test.com;
    root html/test;
    location / {
        index  index.html index.htm index.php;
    }
    location ~* \.(jpg|gif|jpeg|bmp|png|ico|txt|js|css)$
    {
        expires 7d;
    }
    location ~\.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi.conf;
        fastcgi_cache CGI_Cache;
        fastcgi_cache_valid 200 302 1h;
        fastcgi_cache_valid 301 1d;
        fastcgi_cache_valid any 1m;
    }
}
    
} 

        2.测试代码

<html>
 <head>
  <title>TEST PAGE</title>
 </head>
 <body>
 <?php echo '<p>I AM CACHE???</p>'; ?>
 </body>
</html>

       3.参数详解

fastcgi_cache_path /cache/fastcgi_cache levels=1:2 keys_zone=CGI_Cache:10m inactive=5m max_size=1g;
#inactive 为非活动时间为3分钟
#levels 第一位表示使用1级子目录,冒号隔开第二位表示使用2级子目录。最多使用三级。1表示每个一级子目录的名字只能使用1个字符,内存中找多少空间存储键。

fastcgi_connect_timeout 300;
#Nginx服务器与后端FastCGI服务器连接的超时时间;

fastcgi_send_timeout 300;
#Nginx允许FastCGI服务器返回数据的超时时间,否则Nginx则断开连接;

add_header X-via $server_addr;
add_header X-Cache $upstream_cache_status;
#自定义响应报文的首部;
#$upstream_cache_status 该变量来显示缓存的状态

fastcgi_buffer_size 64k;
#Nginx FastCGI的缓冲区大小,用于读取从FastCGI收到的第一部分相应信息的缓冲大小;

fastcgi_buffers 4 64k;
#设定本地需要用多少和多大的缓冲区来缓冲FastCGGI的请求。如果一个PHP脚本所产生的页面为256KB,那么就会分配4个64KB的缓冲区来存放数据,大于256的被放置Fastcgi临时文件目录,该目录位于磁盘。

fastcgi_busy_buffers_size 128k;
#用于设置系统繁忙时候的fastcgi_buffers大小;值必须大于fastcgi_buffer,一般为其2倍;

fastcgi_temp_file_write_size 128k;
#FastCGI临时文件大小,一般设置为128 - 256 KB;

server_names_hash_max_size 4096;
server_names_hash_bucket_size 2048;
#设定用于哈希域名的内存空间,Nginx会把server中的域名哈希至内存,当客户端请求时,会把客户端的请求结果与内存空间中的域名进行比对,其速度提升显著;

fastcgi_cache CGI_Cache;
#表示使用哪个内存空间;

fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;
#设定各个状态码的缓存周期;

ignore_invalid_headers  on;
#如果有首部无法理解就直接忽略;

fastcgi_cache_min_uses 1;
#表示请求几次将其缓存;

factcgi_store  on;
fastcgi_store_access user:rw group:rw all:r;
fastcgi_temp_path /data/temp;
#暂存fastcgi自己处理的结果,内存空间不够的时候才这么用,会导致性能会下降。一般不建议这么用,应该加大buffer值;

factcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
#SCRIPT_FILENAME 用户请求的脚本文件名,通过URI的方式向后端传递;

#fastcgi_cache_use_stale xxxx;
#指明Nginx在什么情况下使用过期的缓存,类似于proxy_cache中的参数;

       4.测试缓存效果

如果Nginx重启失败,原因可能是没有权限创建目录。以www用户为例对目录授权,mkdir /cache/fastcgi_cache && chown -R www. /cache/fastcgi_cache

                                                                                   图4.1 检测 cache manager 是否存在

                                                 

                                                                                 图4.2 第一次请求结果

                                       

                                                                                        图4.3 缓存结果

                                                

                                                                      图4.4 再次请求查看结果 - 缓存命中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值