CentOS下與Apache連接的PHP多版本共存方案實(shí)現(xiàn)詳解
在apache下整合fastCGI模式運(yùn)行的php-fpm,似乎網(wǎng)上很少相關(guān)材料,就連英文版材料也少。只要是php-fpm,基本上都是與nginx搭配。查了一大批相關(guān)資料,寫(xiě)本文總結(jié)一下。
apache下有多個(gè)fastCGI的支持方案:至少有mod_fcgi、mod_fastcgi(git)、mod_proxy_fcgi等。這兩個(gè)模塊都有點(diǎn)老,尤其mod_fastcgi自從2007年以來(lái)就沒(méi)有更新,略掉不談,事實(shí)上沒(méi)用過(guò)用。mod_proxy_fcgi模塊是httpd 2.4+的版本正式引入,通過(guò)簡(jiǎn)潔的一行 ProxyPassMatch 指令即可。
mod_fcgi
mod_fcgi模塊本身是做fastCGI進(jìn)程管理的,使用它就不需要使用php-fpm管理進(jìn)程了。核心配置參數(shù)
LoadModule fcgid_module modules/mod_fcgid.so
<VirtualHost *:80>
DocumentRoot "/var/www/html/site_1"
ServerName "www.yourhost.com"
DirectoryIndex index.html index.php
#php.ini的存放目錄,Linux下通常不需要
#FcgidInitialEnv PHPRC "D:/php"
# 設(shè)置PHP_FCGI_MAX_REQUESTS大于或等于FcgidMaxRequestsPerProcess,防止php-cgi進(jìn)程在處理完所有請(qǐng)求前退出
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
#php-cgi每個(gè)進(jìn)程的最大請(qǐng)求數(shù)
FcgidMaxRequestsPerProcess 1000
#php-cgi最大的進(jìn)程數(shù)
FcgidMaxProcesses 3
#最大執(zhí)行時(shí)間
FcgidIOTimeout 600
FcgidIdleTimeout 600
#php-cgi的路徑
FcgidWrapper /usr/local/php7/bin/php-cgi .php
AddHandler fcgid-script .php
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
<Directory "/var/www/html/site_1">
Options +ExecCGI
</Directory>
</VirtualHost>
幾個(gè)Fcgid*指令,是優(yōu)化之用,這里僅示例,要按實(shí)際情況調(diào)整數(shù)值。具體參看mod_fcgi官方文檔
使用mod_fcgid的幾個(gè)特點(diǎn)
php-fgi進(jìn)程是由apache模塊啟動(dòng)并管理,不需要配置php-fpm
在php-cig進(jìn)程以apache用戶(hù)身份運(yùn)行,php程序?qū)懙奈募錂?quán)限為apache用戶(hù)(而不像php-fpm下寫(xiě)文件為php-fpm用戶(hù)所有,默認(rèn)是nobody),這樣在目錄權(quán)限管理方面一致性高些。
mod_fastcgi
雖然CentOS 6.x下是apache 2.2,但所幸已經(jīng)有人成功移植: https://github.com/ceph/mod-proxy-fcgi 我們可以直接使用;更幸運(yùn)的是它已經(jīng)進(jìn)入epel源,直接yum安裝即可;不想匹配epel源的,直接下載rpm包安裝也可以(示例 http://mirrors.ustc.edu.cn/epel/6/x86_64/)
當(dāng)然可以重新編譯安裝apache 2.4, 這樣直接有mod_proxy_fcgi可以使用,但這里還是保持原版本不變,省掉編譯的工作量。
參考mod_proxy_fcgi官方文檔,整合php-fpm的配置指令
ProxyPassMatch "^/myapp/.*\.php(/.*)?$" "fcgi://localhost:9000/var/www/"
語(yǔ)法很簡(jiǎn)單,跟配置反向代理類(lèi)似,可以按實(shí)際需要做修改。事實(shí)上與mod_proxy模塊語(yǔ)法一致的,不同處是將http協(xié)議改成fcig協(xié)議。
以上是apache整合php-fpm模式運(yùn)行的fastCGI,接下來(lái)要對(duì)yum安裝的php做下配置修改。
yum安裝的php配置文件 /etc/httpd/conf.d/php.conf ,其中有如下一行
AddHandler php5-script .php
我們要對(duì)不同的站點(diǎn)啟用不同的php,上面一行是對(duì)全局的.php文件分配給php模塊處理,我們把這一行注釋掉。而是在每個(gè)站點(diǎn)啟用不同的php運(yùn)行模式。
以上即是處理方式。
[已知問(wèn)題]:裸目錄地址轉(zhuǎn)發(fā)
有一個(gè)困擾的問(wèn)題沒(méi)有解決,感覺(jué)有點(diǎn)像模塊bug:
對(duì)于配置了DirectoryIndex index.php的目錄,如果其子目錄沒(méi)有index.php,上述ProxyPassMatch還是會(huì)做fastCGI轉(zhuǎn)發(fā),這時(shí)會(huì)看到php-fpm的404響應(yīng),而不是apache的響應(yīng)403頁(yè)面。但前面的規(guī)則并不轉(zhuǎn)發(fā)這裸空目錄的url,所以感覺(jué)像bug
再者就是,對(duì)于ProxyPassMatch匹配的目錄,apache自動(dòng)索引功能失效。(當(dāng)然如果不開(kāi)啟autoindex就無(wú)所謂了。生產(chǎn)環(huán)境下通常不開(kāi)啟的)
其它,似乎也沒(méi)有什么嚴(yán)重后果,或者我沒(méi)還意識(shí)到(?)。
解決方法:每個(gè)目錄下,都放置一個(gè)index.html,避免fpm-php處理空請(qǐng)求
- CentOS 6.4安裝配置LAMP服務(wù)器(Apache+PHP5+MySQL)
- 解析centos中Apache、php、mysql 默認(rèn)安裝路徑
- 在CentOS 6 中安裝WordPress(一) 安裝Apache,Mysql, PHP環(huán)境
- CentOS(Linux)下的apache服務(wù)器配置與管理方法分享
- CentOS Linux 下配置Apache2+PHP5+MySQL5+GD庫(kù)的方法
- CentOS 5.4 服務(wù)器配置 yum安裝Apache+php+Mysql
- Linux+php+apache+oracle環(huán)境搭建之CentOS下源碼編譯安裝PHP
- CentOS 6.3 安裝配置Apache2.2.6的方法(源碼編譯安裝)
- CentOS 7.2配置Apache服務(wù)httpd(上)
- CentOS 7.2配置Apache服務(wù)httpd(下)
相關(guān)文章
PHP 實(shí)現(xiàn)人民幣小寫(xiě)轉(zhuǎn)換成大寫(xiě)的方法及大小寫(xiě)轉(zhuǎn)換函數(shù)
這篇文章主要介紹了PHP 實(shí)現(xiàn)人民幣小寫(xiě)轉(zhuǎn)換成大寫(xiě)的方法,大小寫(xiě)轉(zhuǎn)換函數(shù)的使用方法介紹,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-11-11
Laravel ORM對(duì)Model::find方法進(jìn)行緩存示例詳解
這篇文章主要給大家介紹了關(guān)于Laravel ORM對(duì)Model::find方法進(jìn)行緩存的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03
PhpStorm 如何優(yōu)雅的調(diào)試Hyperf的方法步驟
這篇文章主要介紹了PhpStorm 如何優(yōu)雅的調(diào)試Hyperf的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
thinkPHP框架實(shí)現(xiàn)生成條形碼的方法示例
這篇文章主要介紹了thinkPHP框架實(shí)現(xiàn)生成條形碼的方法,結(jié)合實(shí)例形式分析了thinkPHP結(jié)合第三方barcode類(lèi)文件生成條形碼的相關(guān)操作技巧,需要的朋友可以參考下2018-06-06
yii實(shí)現(xiàn)CheckBox復(fù)選框在同一行顯示的方法
這篇文章主要介紹了yii實(shí)現(xiàn)CheckBox復(fù)選框在同一行顯示的方法,對(duì)比了網(wǎng)上搜集的方法,給出了改進(jìn)的意見(jiàn),非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-12-12

