php-fpm 模式实现 LAMP
文章目录
fastcgi模式介绍
-
fastcgi模式下php以独立程序状态运行,有独立的进程、端口号
-
php-fpm软件包:专用于将php运行于fastcgi模式,与php软件包不能够同时安装
-
httpd2.4支持fastcgi模式,httpd2.2不支持该模式,故CentOS 6环境需要编译httpd2.4才能使用fastcgi模式
安装php-fpm
- CentOS 7 安装php-fpm
- BASE源安装PHP-FPM
yum install php-fpm
- 清华大学yum源安装较新版的PHP-FPM(依赖EPEL源)
yum install https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-
7.rpm
//安装php-fpm5.6版
yum install php56-php-fpm php56-php-mysql
//安装php-fpm7.3版
yum install php73-php-fpm php73-php-mysql
配置php-fpm
- 查看php-fpm所对应的配置文件
rpm -ql php-fpm
/usr/lib/systemd/system/php-fpm.service
/etc/logrotate.d/php-fpm
/etc/php-fpm.conf
/etc/php-fpm.d
/etc/php-fpm.d/www.conf
/etc/sysconfig/php-fpm
/run/php-fpm
-
php-fpm 主要配置文件:
- /etc/php-fpm.conf
- /etc/php-fpm.d/*.conf
-
PHP-FPM常见配置
- daemonize = no //是否将程序运行在后台
- listen = 127.0.0.1:9000 //FPM 监听地址
- listen = /var/run/php.sock //UDF模式使用,指定生成的unix socket文件的路径
- listen.owner = apache //UDF模式使用,指定生成的unix socket文件的所有者
- listen.group = apache //UDF模式使用,指定生成的unix socket文件的所属组
- listen.mode= 0666 //UDF模式使用,,指定生成的unix socket文件的权限
- listen.acl_users = apache,nginx //指定用户访问unix socket文件,listen.owner 和 listen.group将无效
- listen.backlog = -1 //等待队列的长度 -1表示无限制
- listen.allowed_clients = 127.0.0.1 //仅允许哪些主机访问
- pm = dynamic|static //static 固定数量的子进程, //dynamic子进程数据以动态模式管理
- pm.max_childen //static 固定数量的子进程
- pm.start_servers
- pm.min_spare_servers
- pm.max_spare_servers
- pm.max_requests = 500
- php_value[session.save_handler] = files
- php_value[session.save_path] = /var/lib/php/session //设置session存放位置
-
session目录
- 确保运行php-fpm进程的用户对session目录有读写权限
- mkdir /var/lib/php/session chown apache.apache /var/lib/php/session
-
启动PHP-FPM systemctl start php-fpm
范例:php-fpm配置生产案例
cat /etc/php-fpm.d/www.conf
[www]
listen = 127.0.0.1:9000 #监听地址及IP
listen.allowed_clients = 127.0.0.1 #允许客户端从哪个源IP地址访问,要允许所有行首加 ;注
释即可
user = apache #php-fpm启动的用户和组,会涉及到后期文件的权限问题
group = apache
pm = dynamic #动态模式进程管理
pm.max_children = 500 #静态方式下开启的php-fpm进程数量,在动态方式下他限定php-fpm的最大
进程数
pm.start_servers = 100 #动态模式下初始进程数,必须大于等于pm.min_spare_servers和小于等
于pm.max_children的值。
pm.min_spare_servers = 100 #最小空闲进程数
pm.max_spare_servers = 200 #最大空闲进程数
pm.max_requests = 500000 #进程累计请求回收值,会重启
pm.status_path = /pm_status #状态访问URL
ping.path = /ping #ping访问动地址
ping.response = ping-pong #ping返回值
slowlog = /var/log/php-fpm/www-slow.log #慢日志路径
php_admin_value[error_log] = /var/log/php-fpm/www-error.log #错误日志
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files #phpsession保存方式及路径
php_value[session.save_path] = /var/lib/php/session #当时使用file保存session的文件
路径
httpd、fastcgi、maridb分别在不同服务器时,以php-fpm模式实现LANMP
注意:在HTTPD服务器上必须启用proxy_fcgi_module模块,才能充当php-fpm客户端
httpd-192.168.26.18
//安装httpd服务
dnf -y install httpd
//httpd想要支持fastcgi,就必须有支持fastcgi的模块如下
proxy_fcgi_module
//proxy_fcgi_module模块是由这个文件加载实现的(安装httpd后默认就有了)
cat /etc/httpd/conf.modules.d/00-proxy.conf
#想让apache支持处理php基于fastcgi,要指定apache收到php指令后转发至目标服务器上去
//新建编辑httpd的子配置文件
vim /etc/httpd/conf.d/fcgi.conf
//httpd子配置文件内容如下
DirectoryIndex index.php
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.26.28:9000/var/www/html/$1
#以上开启FCGI反向代理,“^/”这处的”/“相对于后面的/var/www/html而言,后面的$1是指前面的/(.*.php)
//启动服务
systemctl start httpd.service
fastcgi-192.168.26.28
//安装fastcgi服务
dnf -y install php-fpm php-mysqlnd
//修改php-fpm配置文件
vim /etc/php-fpm.d/www.conf
-------------------------------------------
;listen = /run/php-fpm/www.sock #注释这行
listen = 127.0.0.1:9000 #添加一行,内容如此
---------------------------------------------
;listen.allowed_clients = 127.0.0.1 #注释这行
----------------------------------------------
//查看端口,9000端口已开放
ss -ntl
//创建测试文件
vim /var/www/html/test.php
//测试文件内容为
<?php
phpinfo();
?>
- 浏览器访问192.168.26.18/test.php测试页面跳转出来了
- 但测试文件实际存储在192.168.26.28:/var/www/html/路径下
- wordpress5.2版本下载地址:https://cn.wordpress.org/download/releases/
//使用rz命令将下载的wordpress5.2版本传进虚拟机
wordpress-5.2.4-zh_CN.tar.gz
//解包到指定目录下
tar xf wordpress-5.2.4-zh_CN.tar.gz -C /var/www/html/
//修改wordpress目录权限
chown -R apache.apache /var/www/html/wordpress
//
- 浏览器访问192.168.26.18/wordpress/index.php/
//修改192.168.26.18:/etc/httpd/conf.d/fcgi.conf的子配置文件
//内容为
DirectoryIndex index.php
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.26.28:9000/var/www/html/wordpress/$1
- 浏览器访问192.168.26.18
mariadb-192.168.26.38
//安装mariadb数据库服务
dnf -y install mariadb-server
//启动服务
systemctl start mariadb.service
//进入数据库
mysql
//创建数据库
CREATE DATABASE wordpress;
//创建用户授予权限(地址的话要写地址段,因为要跨网路)
GRANT ALL ON wordpress.* TO wordpress@'192.168.26.%' IDENTIFIED BY 'wordpress';
Centos 7 利用yum安装基于PHP-FPM模式的LAMP
百度清华大学yum源
选择remi源列表下的:
[维护的企业Linux(RHEL / CentOS /其他克隆)]
Enterprise Linux 8-存储库自动配置软件包: remi-release-8.rpm
Enterprise Linux 7-存储库自动配置软件包: remi-release-7.rpm #选择这项右击复制链接地址
Enterprise Linux 6-存储库自动配置软件包: remi-release-6.rpm
------------------------------------------------------------------------------------
//配置清华php源
yum -y install https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-7.rpm
//安装相关服务
yum -y install mariadb-server php-mysqlnd
//启动服务
systemctl start httpd.service php-fpm
//创建实验所需目录
mkdir /data/{a,b,c}
//创建实验所需页面文件
----------------------------------------------
vim /data/a/a.php
//文件内容为
<?php
echo "<h1><center>www.a.com</center></h1>";
echo "<h2><center>www.a.com</center></h2>";
echo "<h3><center>www.a.com</center></h3>";
echo "<h4><center>www.a.com</center></h4>";
echo "<h5><center>www.a.com</center></h5>";
echo "<h6><center>www.a.com</center></h6>";
?>
------------------------------------------------
vim /data/b/b.php
//文件内容为
<?php
echo "<h1><center>www.b.com</center></h1>";
echo "<h2><center>www.b.com</center></h2>";
echo "<h3><center>www.b.com</center></h3>";
echo "<h4><center>www.b.com</center></h4>";
echo "<h5><center>www.b.com</center></h5>";
echo "<h6><center>www.b.com</center></h6>";
?>
------------------------------------------------
vim /data/c/c.php
//文件内容为
<?php
echo "<h1><center>www.c.com</center></h1>";
echo "<h2><center>www.c.com</center></h2>";
echo "<h3><center>www.c.com</center></h3>";
echo "<h4><center>www.c.com</center></h4>";
echo "<h5><center>www.c.com</center></h5>";
echo "<h6><center>www.c.com</center></h6>";
?>
------------------------------------------------
//新建编辑配置文件
vim /etc/httpd/conf.d/test.conf
//文件内容为
listen 8001
listen 8002
listen 8003
DirectoryIndex index.php
ProxyRequests Off
ProxyPassMatch ^/((.*)\.php)$ fcgi://127.0.0.1:9000/data/$2/$1
<virtualhost *:8001>
documentroot /data/a/
<directory /data/a/>
require all granted
</directory>
</virtualhost>
<virtualhost *:8002>
documentroot /data/b/
<directory /data/b/>
require all granted
</directory>
</virtualhost>
<virtualhost *:8003>
documentroot /data/c/
<directory /data/c/>
require all granted
</directory>
</virtualhost>
-----------------------------------------------------------------
//重启服务
systemctl restart httpd.service
- 浏览器访问192.168.26.27:8001/a.php得
- 浏览器访问192.168.26.27:8001/b.php得
- 浏览器访问192.168.26.27:8001/b.php得