1. 程式人生 > >lamp環境搭建之配置apache與fpm方式的php

lamp環境搭建之配置apache與fpm方式的php

配置apache-2.4.9與fpm方式的php-5.4.26

一、apache、MySQL的安裝參考《編譯安裝lamp環境》

http://blog.csdn.net/reblue520/article/details/50401824

二、編譯安裝php-5.4.26

1、解決依賴關係:


請配置好yum源(可以是本地系統光碟)後執行如下命令:
# yum -y groupinstall "Desktop Platform Development"
# yum install -y bzip2-devel libmcrypt-devel

2、編譯安裝php-5.4.26,兩種PHP模式共存(apache模組方式和php-fpm)

//刪除之前的原始碼包
# rm -rf php-5.4.26
# tar xf php-5.4.26.tar.bz2
# cd php-5.4.26
# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml  --enable-sockets --enable-fpm --with-mcrypt  --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2

//共存情況下使用
# ./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml  --enable-sockets --enable-fpm --with-mcrypt  --with-config-file-path=/etc/php5/ --with-config-file-scan-dir=/etc/php5.d --with-bz2



說明:如果使用PHP5.3以上版本,為了連結MySQL資料庫,可以指定mysqlnd,這樣在本機就不需要先安裝MySQL或MySQL開發包了。mysqlnd從php 5.3開始可用,可以編譯時繫結到它(而不用和具體的MySQL客戶端庫繫結形成依賴),但從PHP 5.4開始它就是預設設定了。
# ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd

# make
# make intall


為php提供配置檔案:
# mkdir /etc/php5
# cp php.ini-production /etc/php5/php.ini

3、配置php-fpm

為php-fpm提供Sysv init指令碼,並將其新增至服務列表:
# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
# chmod +x /etc/rc.d/init.d/php-fpm
# chkconfig --add php-fpm
# chkconfig php-fpm on
# chkconfig --list php-fpm


為php-fpm提供配置檔案:
# cd /usr/local/php5/etc
# cp php-fpm.conf.default php-fpm.conf

編輯php-fpm的配置檔案:
# vim /usr/local/php5/etc/php-fpm.conf
配置fpm的相關選項為你所需要的值,並啟用pid檔案(如下最後一行):
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 8
pid = /usr/local/php5/var/run/php-fpm.pid



接下來就可以啟動php-fpm了:
# service php-fpm start

使用如下命令來驗正(如果此命令輸出有中幾個php-fpm程序就說明啟動成功了):
# ps aux | grep php-fpm

預設情況下,fpm監聽在127.0.0.1的9000埠,也可以使用如下命令驗正其是否已經監聽在相應的套接字。
# netstat -tnlp | grep php-fpm
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      689/php-fpm 
或者
# ss -tnlp | grep php-fpm


三、配置httpd-2.4.4

1、啟用httpd的相關模組

# cd /etc/httpd/
//將之前使用的php配置檔案改名,並啟用初始的httpd.conf檔案
# mv httpd.conf httpd.conf.module
# cp httpd.conf.bak httpd.conf

在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


2.編輯apache配置檔案httpd.conf,讓apache能識別php格式的頁面,並支援php格式的主頁

# vim /etc/httpd/httpd.conf
 1、新增如下二行
   AddType application/x-httpd-php  .php
   AddType application/x-httpd-php-source  .phps


 2、定位至DirectoryIndex index.html 
   修改為:
    DirectoryIndex  index.php  index.html


3、配置虛擬主機的方式支援使用fcgi

①啟用虛擬主機配置
# cd /etc/httpd/
vim httpd.conf
註釋掉公共的訪問www目錄
#DocumentRoot "/usr/local/apache/htdocs"

開啟虛擬主機配置檔案
Include /etc/httpd/extra/httpd-vhosts.conf


在相應的虛擬主機中新增類似如下兩行

ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1
# cd /etc/httpd/extra/
# vim httpd-vhosts.conf
新增如下內容:

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/web/a.com/htdocs"
    ServerName www.a.com
    ServerAlias a.com
    ErrorLog "logs/a.com.err"
    CustomLog "logs/a.com.access" combined
    <Directory "/web/a.com/htdocs">
Options None
Require all granted
    </Directory>
    ProxyRequests Off
    ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/web/a.com/htdocs/$1
</VirtualHost>


<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/web/b.org/htdocs"
    ServerName www.b.org
    ServerAlias b.org
    ErrorLog "logs/b.org.err"
    CustomLog "logs/b.org.access" combined
    <Directory "/web/b.org/htdocs">
Options None
Require all granted
    </Directory>
    ProxyRequests Off
    ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/web/b.org/htdocs/$1
</VirtualHost>


建立對應的虛擬主機目錄
# mkdir -pv /web/{a.com,b.org}/htdocs
# vim /web/a.com/htdocs/index.php

例如:
<VirtualHost *:80>
    DocumentRoot "/www/magedu.com"
    ServerName magedu.com
    ServerAlias www.magedu.com

ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/www/magedu.com/$1

    <Directory "/www/magedu.com">
        Options none
        AllowOverride none
        Require all granted
    </Directory>
</VirtualHost>

ProxyRequests Off:關閉正向代理
ProxyPassMatch:把以.php結尾的檔案請求傳送到php-fpm程序,php-fpm至少需要知道執行的目錄和URI,所以這裡直接在fcgi://127.0.0.1:9000後指明瞭這兩個引數,其它的引數的傳遞已經被mod_proxy_fcgi.so進行了封裝,不需要手動指定。

4.新增主機地址解析

# vim /etc/hosts

加入:
192.168.8.40 www.a.com a.com
192.168.8.40 www.b.org b.org

補充:Apache httpd 2.4以前的版本中,要麼把PHP作為Apache的模組執行,要麼新增一個第三方模組支援PHP-FPM實現。

報錯處理:


httpd-vhosts.conf檔案中<Directory>

改成</Directory>

若開啟的主頁時,不顯示內容,出現下載

可能是/etc/httpd/extra/httpd-vhosts.conf檔案沒有配置如下內容:

 <Directory "/web/b.org/htdocs">
Options None
Require all granted
    <Directory>

6、通過單機的方式配置apache和php結合

編輯apache配置檔案httpd.conf,以apache支援php

# vim /etc/httpd24/httpd.conf
1、新增如下二行
AddType application/x-httpd-php  .php
AddType application/x-httpd-php-source  .phps



2、定位至DirectoryIndex index.html 修改為:
DirectoryIndex  index.php  index.html



3、啟用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   

4、關閉正向代理
ProxyRequests Off:關閉正向代理
ProxyPassMatch:把以.php結尾的檔案請求傳送到php-fpm程序,php-fpm至少需要知道執行的目錄和URI,所以這裡直接在fcgi://xxx.x.x.x:9000後指明瞭這兩個引數,其它的引數的傳遞已經被mod_proxy_fcgi.so進行了封裝,不需要手動指定。

ProxyPassMatch ^/(.*\.php)$ fcgi://172.16.251.134:9000/usr/local/apache/htdocs$1

而後重新啟動httpd,或讓其重新載入配置檔案即可測試php是否已經可以正常使用。

最後在php的指定的fcgi的路徑上提供一個php的測試頁面: 

# vim /usr/local/apache/htdocs/index.php 
<?php
$link = mysql_connect('172.16.251.171','wei','wei');
if ($link)
  echo "Connection Success....."
else
  echo "Connection Failrue....."
mysql_close();
phpinfo();
?>

四、為php新增xcache加速器

1、安裝

# tar xf xcache-3.0.3.tar.bz2 
# cd xcache-3.0.3
# /usr/local/php5/bin/phpize 
# ./configure --enable-xcache --with-php-config=/usr/local/php5/bin/php-config
# make && make install

安裝結束時,會出現類似如下行:
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-zts-20100525/

2、編輯php.ini,整合php和xcache:

首先將xcache提供的樣例配置匯入php.ini
# mkdir /etc/php5.d
# cp xcache.ini /etc/php5.d

說明:xcache.ini檔案在xcache的原始碼目錄中。

接下來編輯/etc/php5.d/xcache.ini,找到extension開頭的行,修改為如下行:
# vim /etc/php5.d/xcache.ini

extension = /usr/local/php5/lib/php/extensions/no-debug-non-zts-20100525/xcache.so


通過列印phpinfo()資訊可以看到xcache是否安裝成功



注意:如果php.ini檔案中有多條zend_extension指令行,要確保此新增的行排在第一位。