一:編譯php工作在xcache模式下
在編譯安裝之前,要首先確定其安裝環境,需要安裝相關的開發環境的包組“Development tools”和“Server Platform Development”。
Apache篇
1:安裝apache需要先安裝apr包和apr-util包,還依賴于pcre-devel包,是以我們要先安裝所依賴的包。系統自帶的apr和apr-util版本較老,我們這裡需要手動去更新,更新的方式有2種,一種是直接更新rpm包,還有一種可以通過源碼來進行編譯,我們這裡使用源碼編譯進行安裝。我們以apr-1.4.6.tar.bz2和apr-util-1.5.2.tar.bz2為例。
#yum -y install pcre-devel
(1) 編譯安裝apr
# tar xf apr-1.4.6.tar.bz2
# cd apr-1.4.6
# ./configure --prefix=/usr/local/apr
# make && make install
(2) 編譯安裝apr-util
# tar xf apr-util-1.5.2.tar.bz2
# cd apr-util-1.5.2
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
(3)編譯安裝apache
#tar xf httpd-2.4.6.tar.bz2
#cd httpd-2.4.6
# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=event
各選項的意義:
--prefix=/usr/local/apache #指定httpd的安裝路徑
--sysconfdir=/etc/httpd24 #指定安裝後配置檔案的路徑
--enable-so #這項是關鍵:支援動态子產品裝解除安裝,如果不寫的話,php沒辦法以子產品的方式編譯成apache的子產品了
--enable-ssl #支援https
--enable-cgi #支援cgi動态執行
--enable-rewrite #支援url重寫
--with-zlib #支援使用zlib庫将資料發送到用戶端之前進行壓縮
--with-pcre #和依賴的pcre軟體包相關
--with-apr=/usr/local/apr #依賴于apr告知apr的安裝路徑
--with-apr-util=/usr/local/apr-util #依賴于apr-util,告知其安裝路徑
--enable-modules=most #支援多數子產品
--enable-mpms-shared=all #建構MPM為動态子產品,将所有的子產品都設為動态共享,可以在系統運作時加載
--with-mpm=prefork #指定安裝的子產品式prefork,如果安裝後想要更改,可以再編輯LoadModule指令内容選擇不同的子產品。
2:為其提供服務腳本。
# cd /etc/rc.d/init.d/
# cp httpd httpd24 以httpd的服務腳本為基礎進行修改
#vim httpd24
找到以下選項的位置對其進行修改
<a href="http://blog.51cto.com/attachment/201308/110451567.png"></a>
#chkconfig --add httpd24 添加httpd24服務
#chkconfig --list httpd24 檢視服務的運作狀态,預設是關閉的
如果想要設定自動開機啟動:
#chkconfig httpd24 on
#service httpd24 start 啟動服務
檢查80端口是否處于監聽狀态
#ss -tanl
然後我們通過浏覽器做通路測試。
PHP篇
注意:編譯安裝php之前,要確定apache和mysql安裝成功,因為php的有些選項依賴它們的某些檔案。mysql在前面的部落格中我們已經示範安裝了,是以我們可以安裝php了。
1:我們以php-5.4.19.tar.bz2為例
#tar xf php-5.4.19.tar.bz2
#cd php-5.4.19
在這個目錄下, php.ini-development是在開發環境中建議使用的模闆;php.ini-production是在生産環境中建議使用的模闆。
編譯的時候依賴于libmcrypt-devel和mhash-devel,是以我們先安裝這兩個包。
# yum install libmcrypt-devel mhash-devel
#./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 --with-apxs2=/usr/local/apache/bin/apxs --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts
--prefix=/usr/local/php #指定安裝路徑
--with-mysql=/usr/local/mysql #指定mysql的安裝路徑
--with-openssl #支援加密功能
--with-mysqli=/usr/local/mysql/bin/mysql_config #指定mysql的進階接口
--enable-mbstring #支援多位元組的字元
--with-freetype-dir #支援多種字型檔案庫
--with-jpeg-dir #支援jpeg圖檔格式
--with-png-dir #支援pnf圖檔格式
--with-zlib #支援使用zlib庫将資料發送到用戶端之前進行壓縮
--with-libxml-dir=/usr #指定擴充标記語言庫檔案路徑
--enable-xml #支援擴充标記語言
--enable-sockets #php可以基于sockets進行通信
--with-apxs2=/usr/local/apache/bin/apxs #指将php安裝成apache的動态子產品
--with-mcrypt #支援加密解密功能
-with-config-file-path=/etc #指定配置檔案的路徑,主配置檔案php.ini放在這裡
--with-config-file-scan-dir=/etc/php.d #指定主配置檔案的從配置檔案路徑,這裡放置一些以.ini 結尾的檔案
--with-bz2 #支援bz2的壓縮格式
--enable-maintainer-zts #取決于mpm所選擇的模型,worker和event時,需要這個選項,而如果是prefork,就不需要了
在編譯安裝的過程中還提示有别的包需要安裝,其中有libxml2,bzip2,是以我們還要安裝libxml2-devel,bzip2-devel。
注意:當提示我們所依賴的包時,我們要安裝包的devel的包!
#yum -y install libxml2-devel bzip2-devel
安裝好了之後,再重新進行剛才執行錯誤的編譯安裝,這一步操作成功後,我們就快成功了。
接着編譯:
#make && make install
至此php安裝成功了。
2:由于我們安裝的php還不能滿足要求,是以還要修改它的配置檔案。
# vim /etc/httpd24/httpd.conf
可以看到裡面多了一個 modules/libphp5.so子產品,有了這個子產品,就可以解析php腳本了。此時php還不能識别php格式的網頁,是以我們還要添加相關的配置。
找到AddType的相關說明添加選項:
AddType application/x-httpd-php .php
這樣就能識别php結尾的網頁了,還有些網頁是以phps結尾的網頁,如果也要識别這種格式的網頁,那麼我們還要添加選項:
AddType application/x-httpd-php-source .phps
我們要預設能識别的網頁檔案是以.php結尾的檔案,還需要配置一些選項
找到Directorylndex的位置添加index.php
<a href="http://blog.51cto.com/attachment/201308/111026634.png"></a>
我們需要測試一下,但是我們有兩個版本httpd,一個是編譯的,還有一個是rpm包的,是以我們還要編輯一些檔案
#vim /etc/profile.d/httpd.sh
export PATH=/usr/local/apache/bin:$PATH
重新讀取
# . /etc/profile.d/httpd.sh
這時候測試就能找到我們所編譯安裝的httpd了
進行測試
#httpd -t
可以驗證一下
#hash
然後重新開機服務
#service httpd24 restart
3:驗證一下我們安裝的php,在這裡我們用主伺服器驗證,主伺服器預設的網頁的安裝路徑為/usr/local/apache/htdocs,
我們可以在自己的目錄下編輯網頁
# mkdir /web/htdocs/ -pv
# vim /web/htdocs/index.php
<a href="http://blog.51cto.com/attachment/201308/111141483.png"></a>
然後修改apache的主配置檔案
#vim /etc/httpd24/httpd.conf
找到DocumentRoot的位置,編輯相關内容
#
DocumentRoot "/web/htdocs"
<Directory "/web/htdocs">
提供主配置檔案
# cd php-5.4.19
# cp php.ini-production /etc/php.ini
重新啟動使其生效
然後在浏覽器上測試,顯示我們所編輯的網頁,測試成功。
Pma的配置設定
我們再安裝一個軟體能夠基于圖形化的界面進行管理
以phpMyAdmin-3.5.1-all-languages.tar.bz2為例:
在這裡啟用基于虛拟主機的方式提供服務
首先啟用虛拟主機,先建立pma放置的路徑
# mkdir /web/htdocs/pma
# tar xf phpMyAdmin-3.5.1-all-languages.tar.bz2
# mv phpMyAdmin-3.5.1-all-languages/* /web/htdocs/pma
#cd /web/htdocs/pma
# cp config.sample.inc.php config.inc.php
# vim config.inc.php
<a href="http://blog.51cto.com/attachment/201308/111243332.png"></a>
我們先生成随機數寫在要求位置,最好用指令生成,
# openssl rand -hex 4
cc0d142f
接着配置虛拟主機
#cd /etc/httpd24
# vim httpd.conf
将中心主機注釋掉
#DocumentRoot "/web/htdocs"
找到vhosts
# Virtual hosts
Include /etc/httpd24/extra/httpd-vhosts.conf <------- 啟用的選項
# vim /etc/httpd24/extra/httpd-vhosts.conf
将以前的配置注釋掉,編輯新的配置
<a href="http://blog.51cto.com/attachment/201308/111411433.png"></a>
然後檢查文法錯誤、重新開機服務。
通路基于主機名,還要進行解析
<a href="http://blog.51cto.com/attachment/201308/111440689.png"></a>
打開hosts檔案編輯
172.16.4.5 pma.magedu.com
基于主機名通路:在浏覽器中輸入pma.magedu.com打開網頁,輸入使用者名、密碼就OK了。
XCache篇
XCache是php的加速器,可以提高php的性能
以xcache-3.0.3.tar.bz2為例
1、安裝
# tar xf xcache-3.0.1.tar.gz
# cd xcache-3.0.1
# /usr/local/php/bin/phpize <------- 識别目前子產品
# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
2、編輯php.ini,整合php和xcache:
首先将xcache提供的樣例配置導入php.ini
# mkdir /etc/php.d
# cp xcache.ini /etc/php.d
說明:xcache.ini檔案在xcache的源碼目錄中。是一個樣例檔案。
重新啟動識别配置檔案
我們提供一個測試頁
#vim /web/htdocs/pma/phptest.php
<?php
phpinfo();
?>
通過浏覽器檢視:pma.magedu.com/phptest.php
可以找到編輯的檔案
進行壓力測試
ulimit: 資源限定
ulimit -n 檢視目前可以打開的最大數
ulimit -n 2000 設定可以打開2000個
#ab -c 100 -n 1000 http://172.16.4.5/index.php
-c: 模拟的并發數
-n: 總的請求數
注意:xcache安裝好之後用ab指令測試前,要手動請求幾次以生成緩存
#curl 172.16.4.5
#ab -c 2 -n 10 http://172.16.4.5/index.php
可以對比xcache安裝前後使用ab指令壓力測試的結果,就可以體會到xcache對性能的提升有多大了。
二:編譯php工作在FastCGI模式下
1:如果在另外一台伺服器上安裝,要保證安裝apache和mysql成功,這裡我們就不示範了
因為我們在同一台伺服器上編譯安裝,是以我們要将前面編譯的php剝離
先停止httpd服務
#service httpd24 stop
#cd /etc/httpd24/
#vim httpd.conf
将相關的子產品注釋掉
#LoadModule php5_module modules/libphp5.so如果事先沒有編譯php,就沒有這一步了。
我們将以前編譯的php改名,
# mv php-5.4.19 php-5.4.19.module
2:重新解壓編譯安裝
# tar xf php-5.4.19.tar.bz2
#cd php-5.4.19
--prefix=/usr/local/php --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d
前面我們編譯的時候已經用過了這些路徑,是以我們要将有沖突的路徑修改一下,是以最終結果為:
# ./configure --prefix=/usr/local/php54 --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/php54 --with-config-file-scan-dir=/etc/php54/php.d --with-bz2
為php提供配置檔案:
# mkdir /etc/php54
# mkdir /etc/php54/php.d
# cp php.ini-production /etc/php54/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
為php-fpm提供配置檔案:
# cp /usr/local/php54/etc/php-fpm.conf.default /usr/local/php54/etc/php-fpm.conf
編輯php-fpm的配置檔案:
# vim /usr/local/php54/etc/php-fpm.conf
配置fpm的相關選項為你所需要的值,并啟用pid檔案(如下最後一行):
pm.max_children = 30 最多能啟動多少個程序來響應使用者請求的
pm.start_servers = 5 在啟動時,啟動幾個空閑程序
pm.min_spare_servers = 2 最小空閑程序數
pm.max_spare_servers = 8 最大空閑程序數
pm.process_idle_timeout = 10s; 程序的空閑逾時時間
pm.max_requests = 500 每一個子程序最多能夠接受多少請求
pid = /usr/local/php54/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
配置httpd
1、啟用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
2、配置虛拟主機支援使用fcgi
在相應的虛拟主機中添加類似如下兩行。
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1
例如:
<VirtualHost *:80>
DocumentRoot "/www/magedu.com"
ServerName magedu.com
ServerAlias www.magedu.com
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/web/htdocs/pma/$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進行了封裝,不需要手動指定。
3、編輯apache配置檔案httpd.conf,讓apache能識别php格式的頁面,并支援php格式的首頁
(1)、添加如下二行
AddType application/x-httpd-php .php
(2)、定位至DirectoryIndex index.html
修改為:
DirectoryIndex index.php index.html
然後進行測試驗證
啟動服務
#service httpd24 start
# ss -tanl 檢視80端口是否處于監聽狀态
通路我們前面所編輯的測試頁面,/web/htdocs/pma/目錄下的phptest.php
在浏覽器中打開172.16.4.5/phptest.php
補充:Apache httpd 2.4以前的版本中,要麼把PHP作為Apache的子產品運作,要麼添加一個第三方子產品支援PHP-FPM實作。
本文轉自 宋鵬超 51CTO部落格,原文連結:http://blog.51cto.com/qidian510/1282663,如需轉載請自行聯系原作者