天天看點

編譯安裝Apache、php、xcache、FastCGI及相關整合

一:編譯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 &amp;&amp; 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"

&lt;Directory "/web/htdocs"&gt;

提供主配置檔案

# 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 &lt;------- 啟用的選項

# 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 &lt;------- 識别目前子產品

# ./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

&lt;?php

phpinfo();

?&gt;

通過浏覽器檢視: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

例如:

&lt;VirtualHost *:80&gt;

DocumentRoot "/www/magedu.com"

ServerName magedu.com

ServerAlias www.magedu.com

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/web/htdocs/pma/$1

&lt;Directory "/www/magedu.com"&gt;

Options none

AllowOverride none

Require all granted

&lt;/Directory&gt;

&lt;/VirtualHost&gt;

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,如需轉載請自行聯系原作者