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得