linux学习

Nginx+FastCGI

FastCGI

FastCGI简介

快速通用网关接口(Fast Common Gateway Interface,FastCGI)是通用网关接口(CGI)的改进,描述了客户端和服务器程序之间传输数据的一种标准。FastCGI 可以使服务器同时处理更多的 Web 请求。

PHP自带FPM(FastCGI Process Manager,FastCGI进程管理器)模块,用来对PHP解析实例进行管理、优化解析效率。FastCGI将静态请求和动态脚本语言分离开,Nginx专门处理静态请求,转发动态请求给PHP_FPM。

FastCGI是多进程,所以进程消耗更多的服务器内存,PHP-CGI解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。

Nginx+PHP(FastCGI)服务器在3万并发连接下:

  • 开10个Nginx进程消耗150M内存(10*15M)
  • 开64个php-cgi进程消耗1280M内存(20M*64)

配置FastCGI

[root@localhost ~]# vim /etc/php-fpm.d/www.conf
[www]
listen = 127.0.0.1:9000                                  
或
listen = /run/php-fpm/www.sock

配置Nginx文件,主配置文件为安装目录下的conf/nginx.conf,配置Fast-CGI支持PHP网页解析

location / { 
            root   html;
            index index.php index.html index.htm;
        }   

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #   
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }   

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #   
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}  

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #   
        location ~ \.php$ {
            root           html;
            fastcgi_pass   unix:/run/php-fpm/www.sock;
            fastcgi_index  index.php;
           # fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi.conf;
        }

测试:创建PHP首页index.php,测试LNMP架构能否解析PHP页面

[root@zabbixserver conf]# /usr/local/nginx/sbin/nginx -s reload
[root@zabbixserver conf]# systemctl restart php-fpm
[root@zabbixserver conf]# vim /usr/local/nginx/html/test.php
<?php
$i=33;
echo $i;
?>

使用浏览器访问test.php 可以看到页面内容:

image-20230825173254516

创建php页面,测试连接数据库的php页面:

[root@zabbixserver conf]# vim /usr/local/nginx/html/test.php
<?php
$mysqli = @new mysqli('localhost', 'root', '', 'mysql');
//主机名,用户名,密码,数据库
if ($mysqli->connect_errno) {
    die('Connect Error: ' . $mysqli->connect_errno);
}
else{
    echo "link db OK!!!";
}
?>

使用浏览器访问test.php 可以看到页面内容:

image-20230825173510456

修改php页面,测试数据库连接效果:

[root@zabbixserver conf]# vim /usr/local/nginx/html/test.php
<?php
$mysqli = new mysqli('localhost','root','','mysql');
if (mysqli_connect_errno()){
    die('Unable to connect!'). mysqli_connect_error();
}
$sql = "select * from user";
$result = $mysqli->query($sql);
while($row = $result->fetch_array()){
    printf("Host:%s",$row[0]);
    printf("</br>");
    printf("Name:%s",$row[1]);
    printf("</br>");
}
?>

使用浏览器访问test.php 可以看到页面内容:

image-20230825173803574

留言

您的电子邮箱地址不会被公开。 必填项已用 * 标注