apache和nginx都属于web服务器

web服务器只支持处理静态资源(html、jpg、css、js)
静态资源:服务器文件原封不动的通过http协议发送收到客户端,客户端看到的文件和服务器是一样的。
动态资源:是程序,用户执行不了程序,所以在服务端执行程序,把执行结果封装为html、json格式,通过http协议发送给客户,用户看到的是结果。(php、jsp、asp)

php和web服务组合有两种模式(web服务器处理不了程序,怎么才能处理 )

模块模式:附加web服务上的一个模块实现,让web服务带有处理php的能力。(线程来处理,兼职干活)
fastcgi:独立服务(进程来处理,专职干活,实现动静分离,性能更佳)
FastCGI配置指令(动静分离,动态资源交给fastcgi处理,如处理php后缀的文件)

Nginx基于模块ngx_http_fastcgi_module实现通过fastcgi协议将指定的客户端请求转发至php-fpm处 理,其配置指令如下:

fastcgi_pass address;
#转发请求到后端服务器,address为后端的fastcgi server的地址,可用locatio,if in location
示例:
fastcgi_pass localhost:9000; 
fastcgi_pass unix:/tmp/fastcgi.socket;

fastcgi_index name;
#fastcgi默认的主页资源,示例:fastcgi_index index.php;

fastcgi_param parameter value [if_not_empty];
#设置传递给FastCGI服务器的参数值,可以是文本,变量或组合,可用于将Nginx的内置变量赋值给自定义 key
fastcgi_param REMOTE_ADDR $remote_addr;       #客户端源IP 
fastcgi_param REMOTE_PORT $renote_port;       #客户端源端口
fastcgi_param SERVER_ADDR $server_addr;       #请求的服务器IP地址
fastcgi_param SERVER_PORT $server_port;        #请求的服务器端口
fastcgi_param SERVER_NAME $server_name;        #请求的server名称

Nginx默认配置示例:
     location ~ \.php$ {
       root           /scripts;
       fastcgi_pass   127.0.0.1:9000;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;默认脚本路径
 #fastcgi_param SCRIPT_FILENAME  /scripts$fastcgi_script_name;#此行写法不在需要上面的root指令
       fastcgi_param HTTPS on;   #如果是前端代理采用https,当前后端http服务器需要 加此项,否则会造成页面显示不正常
       inculde    fastcgi_params; #此文件默认系统以提供,存放的相对路径为perfix/conf
       }
FastCGI实战案例 : Nginx与php-fpm在同一服务器

Nginx安装完成之后默认生成了与fastcgi的相关配置文件,一般保存在nginx的安装路径的conf目录当 中,比如/apps/nginx/conf/fastcgi.conf、/apps/nginx/conf/fastcgi_params.

php安装可以通过yum或者编译安装,使用yum安装相对比较简单,编译安装更方便自定义参数或选项

27、实现 FastCGI_FastCGI实战案例

php环境准备
安装7.4版本php和相关APP依赖的包
[root@ubunt ~]# apt -y install php7.4-fpm php7.4-mysql
修改nginx配置文件用户与php配置文件用户为统一用户
[root@ubunt ~]# vim /apps/nginx/conf/nginx.conf
user  www-data;
nginx -s reload
ps aux 可查看nginx  worker进程用户被修改成www-data

php配置文件修改:
修改php配置文件监听端口
vim /etc/php/7.4/fpm/pool.d/www.conf 
#;listen = /run/php/php7.4-fpm.sock     #在这一行下面添加
listen = 127.0.0.1:9000                 #此为php在本机上,如果不在一个机器上,就得写php在的ip
修改php配置文件进程数量
pm = dynamic
pm.max_children =5                      #最多⑦5个进程
pm.start_servers = 2                    #刚开始起2个进程
pm.min_spare_servers = 1                #最小空闲1个进程
pm.max_spare_servers = 3                #最大空闲3个进程
pm.process_idle_timeout = 10s;          #空闲进程10s干掉
pm.max_requests = 500                   #每个进程处理多少个请求
修改php配置文件状态页  
pm.status_path = /php-status
开启ping命令,探测php是否健康 
ping.path = /ping 
ping.response = pang(可改)
开启访问日志并配置路径
access.log = /var/log/$pool.access.log  (不指定路径,服务起不来)
开启慢查询
slowlog = log/$pool.log.slow

root@ubunt ~]# grep -Ev "^;|^$" /etc/php/7.4/fpm/pool.d/www.conf (查看修改内容)
[www]
user = www-data     #默认值
group = www-data    #默认值
listen = 127.0.0.1:9000
pm = dynamic
pm.max_children =5                      
pm.start_servers = 2                    
pm.min_spare_servers = 1                
pm.max_spare_servers = 3
pm.status_path = /php-status
ping.path = /ping
ping.response = pang
access.log = /var/log/$pool.access.log
slowlog = log/$pool.log.slow

重启php
[root@ubunt ~]# systemctl restart php7.4-fpm.service
在nginx配置文件下增加include /apps/nginx/conf/conf.d/*.conf; 
增加位置在:配置文件最下面  }内。
mkdir /apps/nginx/conf/conf.d/
vim /apps/nginx/conf/conf.d/php.conf  (必须以conf结尾)
server {
   listen 80;
   server_name www.meng.org;   
   root /data/html;                           #静态页面存放路径
   location ~ \.php$|ping|php-status {        #开启ping和status
            root           /data/php;         #动态页面存放路径
            fastcgi_pass   127.0.0.1:9000;    #php放在本机上,指定本机
            fastcgi_index  index.php;         #默认页面
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
   }
[root@ubunt conf.d]# nginx -s reload   重新加载
创建静态页面目录并写入:[root@ubunt ~]# mkdir /data/html/ -p   
vim /data/html/index.html
www.meng.org
创建动态页面目录并写入:[root@ubunt ~]# mkdir /data/php/
vim /data/php/test.php
<?php
phpinfo();
?>

DNS解析,用windows的cmd命令测试是否可以连接
C:\Users\Administrator>ping www.meng.org
正在 Ping www.meng.org [10.0.0.200] 具有 32 字节的数据:
来自 10.0.0.200 的回复: 字节=32 时间<1ms TTL=64
来自 10.0.0.200 的回复: 字节=32 时间<1ms TTL=64
来自 10.0.0.200 的回复: 字节=32 时间<1ms TTL=64
来自 10.0.0.200 的回复: 字节=32 时间<1ms TTL=64
10.0.0.200 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 0ms,最长 = 0ms,平均 = 0ms
连接成功,去网页访问
先访问静态页面:www.meng.org   显示静态页面www.meng.org
再访问动态页面:www.meng.org/test.php    显示成功,可查看是否开启加速功能 opcache
连接后端mysql
创建mysql连接账号
mysql> create user test@'10.0.0.%' identified by '123456';
测试连接数据库
vim /data/php/mysql.php
<?php
    $servername = "10.0.0.8";
    $username = "test";
    $password = "123456";
    //创建链接
    $conn = mysqli_connect($servername,$username, $password);
    //创建链接
    if (!$conn) {
            die("php连接MySQL数据库失败:" . mysqli_connect_error());
    }
    echo "php连接MySQL数据库成功!";
?>
在网页访问www.meng.org/mysql.php
php连接MySQL数据库成功!

访问www.meng.org/ping
pang
访问www.meng.org/php-status  显示状态页
pool:                 www
process manager:      dynamic
start time:           23/Sep/2022:14:12:26 +0000
start since:          3606
accepted conn:        5
listen queue:         0
max listen queue:     0
listen queue len:     511
idle processes:       1
active processes:     1
total processes:      2
max active processes: 1
max children reached: 0
slow requests:        0

访问www.meng.org/php-status?full  每个worker进程单独显示
访问www.meng.org/php-status?xml   xml格式
访问www.meng.org/php-status?json  json格式
访问www.meng.org/php-status?html  html格式