实现LNP基于fastcgi模式

一,配置前端nginx,web服务器

1,修改nginx主配置文件,添加如下内容

    server {
            listen 80;                      #监听端口
            root /nginx/html/;              #主网页路径
            server_name www.a.com;          #网站名
            location / {
                    fastcgi_pass 192.168.68.17:9000; 
                    fastcgi_index index.php;
                    fastcgi_param  SCRIPT_FILENAME   /var/www/html/$fastcgi_script_name; 
                    include        fastcgi_params; #指定fastcgi相关的所有参数
            }
    }

    指令解析:
            fastcgi_pass: #fastcgi程序所在主机,可用位置:location, if in location
            fastcgi_index:fastcgi默认的主页资源 
            fastcgi_param:指定php页面的存放路径,"注意:如果fastcgi是在远程主机上那么这个指定的路径就必须是远程主机的路径",$fastcgi_script_name该变量所指的是用户输入的php页面的文件
            include:包含的意思

2,重启nginx服务

    systemctl restart nginx

二, 配置fastcgi 服务器

1,安装php-fpm软件包

    yum install php-fpm

2,修改php-fpm配置文件,注意:如若fastcgi程序跟nginx,web服务器在同一台主机该配置不需要修改

    vim /etc/php-fpm.d/www.conf
    该如下两行配置    
        listen = 127.0.0.1:9000  -->listen = 9000 #表示监听9000端口
        #listen.allowed_clients = 127.0.0.1 #这一行的意思是只允许本机访问fastcgi程序,将这一行注释掉就是允许所有人访问

4,根据前端的nginx服务器指定的路径添加php测试页面

    1,创建存放php页面目录
        mkdir  /data/php/
    2,编写php页面文件
       vim /data/php/index.php
            
        <?php
            phpinfo();
        ?>
    #该页面就是显示一下php相关信息

3,启动php-fpm服务

    systemctl start php-fpm

4,查看9000端口是否开始

     ss -ntl|grep 9000
        
        LISTEN     0      128          *:9000                     *:*      

三,访问测试出现如下页面表示成功

通过访问指定URL,获取fastcgi服务器php状态信息

一,配前端web服务器 1,在前端web服务器,添加如下配置

    location ~* ^/(status|ping)$ {  
        include        fastcgi_params;  
        fastcgi_pass   192.168.68.17:9000; #指定后端服务器的ip地址即fastcgi程序监听端口
        fastcgi_param  SCRIPT_FILENAME $fastcgi_script_name;
        
    }
        

2,重启nginx,web服务器

    systemctl  restart nginx

二,配置后端fastcgi服务器 1,修改fastcgi主配置文件(/etc/php-fpm.d/www.conf )

    vim  /etc/php-fpm.d/www.conf
     将下面的两行配置取消注释
     pm.status_path = /status
     ping.path = /ping
    "注意:这两项必须是跟上面的location定义的URL相同!!这两行的作用就是的当客户端访问URL是status,将显示php状态信息,当访问ping时返回pong,"

2,重启php-fpm程序

    systemctl  restart php-fpm

3,访问测试

    [root@centos6 ~]# curl www.a.com/status
    pool:                 www
    process manager:      dynamic
    start time:           26/Mar/2018:10:39:52 +0800
    start since:          148
    accepted conn:        3
    listen queue:         0
    max listen queue:     0
    listen queue len:     128
    idle processes:       4
    active processes:     1
    total processes:      5
    max active processes: 1
    max children reached: 0
    slow requests:        0
    
    
    [root@centos6 ~]# curl www.a.com/ping
    pong

在前端web服务器中开启fastcgi,缓存功能

相关模块ngx_http_fastcgi_module

一, 相关定义fastcgi缓存配置参数

"注意:定义缓存参数只能在http语句块中定义!!!!"
    
    语法:fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];

    指令解析:
        缓存位置为磁盘上的文件系统 
            path
        磁盘path路径中用于缓存数据的缓存空间上限      
            max_size=size   
        缓存目录的层级数量,以及每一级的目录数量     levels=ONE:TWO:THREE     
            levels=levels:    
            示例:leves=1:2:2  
        k/v映射的内存空间的名称及大小 
            keys_zone=name:size   
        非活动时长,超过该时间清除 
             inactive=time      
        

二,调用缓存功能相关配置

    调用指定的缓存空间来缓存数据  可用位置:http,server, location
        fastcgi_cache zone | off;   
    定义用作缓存项的key的字符串  
        fastcgi_cache_key string;   
            示例:fastcgi_cache_key $request_rui;
            "该示例表示使用用户请求URL的hash值当作key"
    为哪些请求方法使用缓存
        fastcgi_cache_methods GET | HEAD | POST ...;    
    缓存空间中的缓存项在inactive定义的非活动时间内至少要被访问到 此处所指定的次数方可被认作活动项 
        fastcgi_cache_min_uses number;  
    收到后端服务器响应后,fastcgi服务器是否关闭连接,建议启用长连接
        fastcgi_keep_conn on | off;      
    不同的响应码各自的缓存时长
        fastcgi_cache_valid [code ...] time;   

三, 开启缓存功能,配置如下:注意下面这些操作都是在前端web服务器上操作

1,在http语句块中定义缓存功能

    vim /etc/nginx/nginx.conf
        http {   
            ...
            
            fastcgi_cache_path /var/cache/nginx/fcgi_cache levels=1:2:1 keys_zone=fcgicache:20m inactive=120s max_size=1g; 
            
            ...
        }

2,上面定义的存放缓存的目录路径需要手工创建

    mkdir /var/cache/nginx/fcgi_cache
    
    当用户访问时该目录会生成一些临时文件
    [root@centos7 ~]# tree /var/cache/nginx/fcgi_cache
    /var/cache/nginx/fcgi_cache
    └── 1
        └── af
            └── 5
                └── e251273eb74a8ee3f661a7af00915af1
    
    3 directories, 1 file

3,调用缓存功能

    server {    
						......
			location ~* \.php$ {    
            fastcgi_pass 192.168.68.17:9000;
            fastcgi_index index.php; #默认php页面
            fastcgi_param  SCRIPT_FILENAME   /data/php$fastcgi_script_name;
            include        fastcgi_params;

            fastcgi_cache fcgicache;    #调用缓存功能,fcgicache是"keys_zone=定义的名字
            fastcgi_cache_key $request_uri;"    
            fastcgi_cache_valid 200 302 10m;    #200,302响应码缓存时间10分钟
            fastcgi_cache_valid 301 1h;  #301相应代码缓存一小时  
            fastcgi_cache_valid any 1m; #其他响应码缓存1分钟    
            
            ...   
            
        }  
            该配置的的作用就是当客户端访问带有php后缀的页面将触发缓存功能