实现php-fpm模式
对于php请求,httpd可以用模块和fastcgi两种方式实现动态程序的支持。
fastcgi模式:php处理请求,不再由http服务器自身进行管理,http服务器把http协议转化为factcgi协议,通过socket发送给fastcgi专用进程处理php程序
从稳定性上看,fastcgi是以独立的进程池运行来程序,如果单独一个进程死掉,系统可以很轻易的丢弃,然后重新分配新的进程来运行逻辑。从安全性上看,fastcgi和http的server完全独立, fastcgi怎么down也不会把server搞垮。
从性能上看,fastcgi把动态逻辑的处理从http server中分离出来,大负荷的IO处理还是留给宿主server,这样hpttd server可以一心一意作IO,对于一个普通的动态网页来说,逻辑处理可能只有一小部分,大量的图片等静态IO处理完全不需要逻辑程序的参与。从扩展性上讲,fastcgi是一个中立的技术标准,完全可以支持任何语言写的处理程序,如php,java,python等。而php-fpm就是用来支持php的fastcgi服务器。
httpd+php结合的方式:
module: php 基于模块,apache换成nginx就不支持。
fastcgi: php-fpm 基于软件
各种OS版本对fastcgi的支持
CentOS 8: 默认使用fpm模式
httpd-2.4:默认rpm包支持fcgi模块
php包默认使用fpm模式
php-fpm包:专用于将php运行于fpm模式
CentOS 7:
httpd-2.4:默认rpm包支持fcgi模块
php-fpm包:专用于将php运行于fpm模式
CentOS 6:
PHP-5.3.2之前:默认不支持fpm机制;需要自行打补丁并编译安装
httpd-2.2:默认不支持fcgi协议,需要自行编译此模块
解决方案:编译安装httpd-2.4, php-5.3.3+
实验:基于端口号实现 php-fpm 的LAMP
两台主机:一台A apache+php-fpm, ip:100
一台B mariadb ip:110
项目: wordpress
1 A 安装httpd
yum install httpd php-fpm php-mysql
useradd -s /sbin/nologin apache
2 A 设置站点ACL权限,主要是用于生成wordpress/wp-config.php文件。
tar xvf wordpress-5.0.4-zh_CN.tar.gz -C /var/www/html/
setfacl -Rm u:apache:rwx /var/www/html/wordpress
3 B 安装数据库并账号授权
yum install mariadb-server
mysql> create database wpdb;
mysql> grant all on wpdb.* to wpuser@'192.168.80.%' identified by '123456';
4. A 配置php-rpm配置文件(基本不用设置)
fcgi服务配置文件:/etc/php-fpm.conf, /etc/php-fpm.d/*.conf
vim /etc/php-fpm.d/www.conf
连接池: pm = static|dynamic
static:固定数量的子进程;pm.max_children
dynamic:子进程数量以动态模式管理,默认值
pm.max_children = 50
pm.start_servers =5
pm.min_spare_servers =5
pm.max_spare_servers =35
pm.max_requests = 500 每个进程可以处理的请求数
确保运行php-fpm进程的用户对session目录有读写权限(测试没有此文件)
mkdir /var/lib/php/session
chown apache.apache /var/lib/php/session
5. A配置httpd,
在Apache httpd 2.4以后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩充
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
5. 方法1.设置:添加对php页面的支持
配置httpd,添加/etc/httpd/conf.d/fcgi.conf配置文件,
DirectoryIndex index.php
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
方法2.直接方式
vim /app/httpd/conf/httpd.conf
User apache #关键,如果是 Daemon启动不了,而虚拟主机可以
Group apache
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
方法3.虚拟主机方式
vim /app/httpd/conf.d/fcgi.conf
<VirtualHost *:80>
DocumentRoot "/var/www/html/"
#ServerName www.abc.com
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
<Directory "/var/www/html/">
Options none
AllowOverride none
Require all granted
</Directory>
</VirtualHost>
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
6.在 var/www/html下写一个index.php 用最简单的phpinfo()函数。
<?php
phpinfo();
?>
7.客户端192.168.80.100/wordpress/浏览器登录,使用账号登录生成wp-config.php文件和数据库文件。