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 可以看到页面内容:
创建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 可以看到页面内容:
修改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 可以看到页面内容: