CentOS 7系統LAMP配置PHP-FPM的示例


CentOS 7 系統出來有一段時間了,今天我們來看在vps中的 CentOS 7 中給lamp環境配置php-fpm的過程,希望文章可以幫助到各位。

CentOS 7 已經發布,並且采用 Apache 2.4 作為默認的 Apache 組件。聽說 Apache 2.4 的 Event 模式很不錯,而且配套的 mod_proxy_fcgi 與 PHP 已經原生支持的 PHP-FPM 配合默契且性能很好,再加上 Google 的 mod_spdy 需要運行在 thread safe 的環境下,改用 CentOS 7 + Apache 2.4 + MariaDB + PHP + PHP-FPM 似乎就成為順理成章的事情了。因為 phpMyAdmin 匹配 PHP-FPM 的配置與一般的虛擬主機稍稍不同,一並寫上。

因為是在現成的 CentOS 7 + PHP + MariaDB + phpMyAdmin 的 LAMP 服務器上將使用 mod_php 的 Apache MPM prefork 模式改為使用 PHP-FPM 的 MPM event 模式,故而直接從安裝 PHP-FPM 開始,然后設置 PHP-FPM 的 pool 配置文件,最后修改 Apache 的虛擬主機配置文件和設置 MPM event 運行參數。

1. 安裝 PHP-FPM

以 root 身份運行,或者 sudo 運行

yum install -y php-fpm

安裝 CentOS 發行版默認的 PHP-FPM 安裝包。yum 會自動解決依賴包的安裝問題。

產生以下2個配置文件:

/etc/php-fpm.conf

/etc/php-fpm.d/www.conf

前一個配置文件不需要修改。后一個就是所謂的 pool 了(好像有人稱之為“代理池”?)。

2. 配置 PHP-FPM 的 pool

Pool 配置文件都在 /etc/php-fpm/ 目錄下,可以有很多個,結構一樣,名稱不同,配置參數根據需要變化。

比如針對每個虛擬主機設置單獨的配置文件。但是水景一頁的這個 VPS 上只運行了幾個自己的虛擬主機,而不是做共享主機使用,所以對幾個網站使用了同一個 www.conf 的配置文件。php-fpm 的參數設置可以參考這里的說明,還有這里的示例。

下面是水景一頁目前在用的參數,還在測試調整當中:

 

pm = dynamic

pm.max_children = 9

pm.start_servers = 2

pm.min_spare_servers = 1

pm.max_spare_servers = 4

pm.max_requests = 500

 

因為並不是用於做共享主機的,只運行自己的幾個虛擬主機,應該不需要給每個虛擬主機創建一個 pool,所以這里給幾個虛擬主機使用相同的 www pool。如果需要給每個虛擬主機建一個單獨的 pool,請參考這篇文章。

3. 修改虛擬主機配置文件

涉及到 2 類文件,一是全局的 Apache 配置文件,一是針對每個虛擬主機(Virtual Host)的配置文件。

3.1 全局 APACHE 配置文件及 EVENT MPM 運行參數

首先,檢查一下,如果有不同的話,需要將 /etc/httpd/conf/httpd.conf 中的

DirectoryIndex index.html

改為

DirectoryIndex index.php index.html index.htm

因為 event MPM 與 prefork MPM 的運行方式不同,參數設置也有不同。而且現在 CentOS 7 中安裝 Apache 之后在默認的配置文件 /etc/httpd/conf/httpd.conf 中都沒有默認的參數了(連之前 prefork 的默認參數都被拿掉了)。所以從方便實用的角度考慮,水景一頁推薦自己創建一個 /etc/httpd/conf.d/common.conf 文件來放置這類全局的、httpd.conf 中又沒有的參數。

下面是水景一頁目前正在使用,但還在測試觀察和優化的 event MPM 運行參數,僅供參考:

 

StartServers 2

ServerLimit 16

MinSpareThreads 32

MaxSpareThreads 128

ThreadsPerChild 64

MaxRequestWorkers 1024

MaxConnectionsPerChild 500

Timeout 30

KeepAlive On

MaxKeepAliveRequests 100

# 2 or 3 for prefork, but event or worker can deal with it cleverly, maybe 15?

KeepAliveTimeout 5

# For Fallback

StartServers 8

MinSpareServers 8

MaxSpareServers 12

MaxClients 50

ServerLimit 50

MaxRequestsPerChild 1000

Timeout 30

KeepAlive On

MaxKeepAliveRequests 100

# 2 or 3 for prefork

KeepAliveTimeout 2

ServerSignature Off

ServerTokens Prod

 

另外可能需要提醒一下,水景一頁目前使用的 Linode VPS 是 1G RAM,基本上就是運行這個網站了。

3.2 修改虛擬主機配置文件

然后還需要修改虛擬主機配置文件中的設置,例子中用的虛擬主機配置文件名是 vhost.conf 和 vhostssl.conf(針對 SSL 加密連接訪問的配置)。這里就不弄太多例子了,原始配置請參考之前安裝配置 LAMP 服務器的文章。

水景一頁這個 VPS 不是給共享服務器而是純粹自用的服務器,只有為數不多的幾個虛擬主機,所以幾個虛擬主機都在同一個文件中。總之是,需要對每個 VirtualHost 里的內容都做修改:在 DocumentRoot 那一行前面增加一段,

ProxyPassMatch ^/(.*.php(/.*)?)$ fcgi://127.0.0.1:9000/srv/www/local/html/$1

紅色字體部分要特別注意,需要與每個 DocumentRoot 后面的路徑一致。

在 CentOS 中,虛擬主機配置文件存放在 /etc/httpd/conf.d 目錄下。例如使用 mod_php 時候其中一個 Virtual Host 的配置(參考這里):

ServerAdmin admin@cnzhx.net

ServerName local.cnzhx.net ProxyPassMatch ^/(.*.php(/.*)?)$ fcgi://127.0.0.1:9000/srv/www/local/html/$1 DocumentRoot /srv/www/local/html/ # protect wpconfig.php Require all Denied RewriteEngine on # BEGIN WordPress … … … # END WordPress ErrorLog "|/usr/sbin/rotatelogs /srv/www/logs/%Y%m%d.www.error.log 86400 480" CustomLog "|/usr/sbin/rotatelogs /srv/www/logs/%Y%m%d.www.access.log 86400 480" combined

前面提到過,phpMyAdmin 的虛擬主機文件設置稍稍有些不同,需要在上面增加的那一句聲明下面再增加一句包含 phpMyAdmin 目錄的聲明,如下面的藍色字體部分,

ProxyPassMatch ^/phpMyAdmin/(.*.php(/.*)?)$ fcgi://127.0.0.1:9000/srv/www/phpmyadmin/public_html/phpMyAdmin/$1 ProxyPassMatch ^/phpMyAdmin((.*)?/)$ fcgi://127.0.0.1:9000/srv/www/phpmyadmin/public_html/phpMyAdmin$1index.php

其它保持不變。

4. 收尾、運行

現在,只需要將 /etc/httpd/conf.modules.d/00-mpm.conf 中的

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

前面加上 # 注釋掉,然后將,

#LoadModule mpm_event_module modules/mod_mpm_event.so

前面的 # 去掉。

如果曾經優化過 Apache 的模塊,還需要檢查一下 /etc/httpd/conf.modules.d/00-proxy.conf 文件中的,

LoadModule proxy_module modules/mod_proxy.so

和

LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

確保它們前面沒有 #。

再重啟 PHP-FPM 和 HTTPD 服務就可以了,

 

systemctl restart php-fpm

systemctl restart httpd

 

http://www.tuicool.com/articles/feAbmui


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM