實現php-fpm的工作機制,編譯LAMP_2015092101

本次實驗目的:實現httpd與php通過fpm結合。

服務器相關信息:

IP:172.16.113.16
2.6.32-504.el6.x86_64
[root@web~]# cat redhat-re
[root@web~]# cat /etc/redhat-release 
CentOSrelease 6.6 (Final)


 

 

編譯安裝httpd2.2

需要的源碼包:

httpd-2.4.16.tar.bz2 

apr-1.5.0.tar.bz2    

apr-util-1.5.3.tar.bz2

 

準備開發環境:

[[email protected]]# yum groupinstall -y "Development tools" "ServerPlatform Development"

 

解決依賴關係:安裝pcre-devel包

[[email protected]]# yum install -y pcre-devel    //支持perl的正則表達式

 

展開並安裝apr

[root@web~]# tar xf apr-1.5.0.tar.bz2 

[root@web~]# cd apr-1.5.0

[[email protected]]# ./configure --prefix=/usr/local/apr

[[email protected]]# make &&make install

[[email protected]]# cd ..    //切換回上一級目錄

 

展開並安裝apr-util

[root@web~]# tar xf apr-util-1.5.3.tar.bz2 

[root@web~]# cd apr-util-1.5.3

[[email protected]]# ./configure --prefix=/usr/local/apr-util--with-apr=/usr/local/apr/

[[email protected]]# make && make install &&cd ..

 

 

展開並安裝httpd

[root@web~]# tar xf httpd-2.4.16.tar.bz2 

[[email protected]]# cd httpd-2.4.16

[[email protected]]# ./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    //指明安裝目錄

#--sysconfdir=/etc/httpd24    //指定配置文件的安裝路徑,此處爲了避免與rpm包所裝的httpd衝突,將路徑名取名爲httpd24

#--enable-so        //支持httpd的模塊化機制

#--enable-ssl     //啓用支持ssl功能,實現https

#--enable-cgi    //支持cgi協議

#--enable-rewrite     //支持url重寫

#--with-zlib     //支持傳輸壓縮

#--with-pcre     //支持perl語言的正則表達式

#--with-apr=/usr/local/apr    //指明編譯升級的apr的路徑

#--with-apr-util=/usr/local/apr-util//指明編譯升級的apr-util路徑

#--enable-modules=most     //指明啓動大多數的模塊

#--enable-mpms-shared=all     //將所有mpm模塊都編譯進httpd(httpd2.4版本的新特性)

#--with-mpm=event    //默認使用event的MPM工作模型

[[email protected]]#  make && make install

[[email protected]]# mkdir /var/run/httpd24    //創建httpd的pid創建目錄

[[email protected]]# vim /etc/httpd24/httpd.conf     //編輯配置文件

PidFile"/var/run/httpd24/httpd.pid"    //添加運行時pid文件的位置

 

爲httpd24提供服務管理腳本:放置於/etc/rc.d/init.d/httpd24,並賦予可執行權限

[[email protected]]# vim /etc/rc.d/init.d/httpd24

 

#!/bin/bash

#chkconfig: - 85 15

#description: The Apache HTTP Server Management script.

./etc/rc.d/init.d/functions

 

apachectl=/usr/local/apache/bin/apachectl                    

httpd=/usr/local/apache/bin/httpd

prog=httpd                                                 

pidfile=/var/run/httpd24/httpd.pid

lockfile=/var/lock/subsys/httpd24

RETVAL=0                                                   

STOP_TIMEOUT=${STOP_TIMEOUT-10} 

 

start() {

       echo -n $"Starting $prog: "

       LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd$OPTIONS

       RETVAL=$?

       echo

       [ $RETVAL = 0 ] && touch ${lockfile}

       return $RETVAL

}

stop() {                                                                                                                                                                   

       echo -n $"Stopping $prog: "                                                                                                                                         

       killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd                                                                                                                    

       RETVAL=$?                                                                                                                                                           

       echo                                                                                                                                                                

       [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}                                                                                                                     

}                                                                                                                                                                          

reload() {                                                                                                                                                                 

   echo -n $"Reloading $prog: "                                                                                                                                            

   if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then                                                                                                              

       RETVAL=6                                                                                                                                                            

       echo $"not reloading due to configuration syntaxerror"                                                                                                               

       failure $"not reloading $httpd due to configurationsyntax error"                                                                                                     

   else                                                                                                                                                                    

       # Force LSB behaviour from killproc                                                                                                                                 

       LSB=1 killproc -p ${pidfile} $httpd -HUP                                                                                                                            

       RETVAL=$?                                                                                                                                                           

       if [ $RETVAL -eq 7 ]; then                                                                                                                                          

           failure $"httpd shutdown"                                                                                                                                       

       fi                                                                                                                                                                  

   fi                                                                                                                                                                      

   echo                                                                                                                                                                    

}                                              

case"$1" in                                                                                                                                                                

 start)                                                                                                                                                                    

       start                                                                                                                                                               

       ;;                                                                                                                                                                  

 stop)                                                                                                                                                                     

       stop                                                                                                                                                                

       ;;                                                                                                                                                                  

 status)                                                                                                                                                                   

       status -p ${pidfile} $httpd                                                                                                                                         

       RETVAL=$?                                                                                                                                                           

       ;;                                                                                                                                                                  

 restart)                                                                                                                                                                  

       stop                                                                                                                                                                

       start                                                                                                                                                               

       ;;                                                                                                                                                                  

 condrestart|try-restart)                                                                                                                                                  

       if status -p ${pidfile} $httpd >&/dev/null; then                                                                                                                    

               stop                                                                                                                                                        

               start                                                                                                                                                       

       fi                                                                                                                                                                  

       ;;                                                                                                                                                                  

 force-reload|reload)                                                                                                                                                      

       reload                                                                                                                                                              

       ;;                                                                                                                                                                  

 graceful|help|configtest|fullstatus)                                                                                                                                      

       $apachectl $@                                                                                                                                                       

       RETVAL=$?                                                                                                                                                           

       ;;                                                                                                                                                                  

  *)                                                                                                                                                                       

       echo $"Usage: $prog{start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}"                                         

       RETVAL=2                                                                                                                                                            

esac                                                                                                                                                                       

                                                                                                                                                                          

exit$RETVAL                                                                                                                                                                

[[email protected]]# chmod +x /etc/rc.d/init.d/httpd24

[[email protected]]# chkconfig --add httpd24    //將httpd24添加至開機自動啓動項

[[email protected]]# chkconfig httpd24 on    //開啓開機自啓動httpd24

[[email protected]]# vim /etc/profile.d/httpd24.sh    //創建此文件並添加如下信息,以爲將編譯的httpd24添加至環境變量

exportPATH=/usr/local/apache/bin:$PATH

 

 

 

編譯安裝mariadb

需要的源碼包:

mariadb-5.5.43-linux-x86_64.tar.gz    (二進制包)

 

安裝mariadb,可通過展開包中的“INSTALL-BINARY”查看安裝步驟:

[root@web~]# tar -xf mariadb-5.5.43-linux-x86_64.tar.gz 

[root@web~]# mv mariadb-5.5.43-linux-x86_64 /usr/local/mysql    //將展開目錄移動至/usr/local下,並重命名爲"mysql"

[root@web~]# cd /usr/local/mysql

[root@webmysql]# groupadd -r -g 306 mysql    //創建系統用戶組:mysql

[root@webmysql]# useradd -r -g 306 -u 306 mysql    //創建系統用戶:mysql

[root@webmysql]# chown -R mysql.mysql .    //將mariadb的展開目錄改爲屬主屬組都是mysql

[root@webmysql]# mkdir -pv /mydata/data       //創建數據庫存放目錄,此目錄最好爲xfs文件系統

mkdir:created directory `/mydata'

mkdir:created directory `/mydata/data'

[root@webmysql]# scripts/mysql_install_db --user=mysql--datadir=/mydata/data    //運行程序自帶腳本安裝mariadb

[root@webmysql]# chown -R root .    //將mariadb的展開目錄及其子目錄屬主改爲root

 

將mariadb自帶的配置文件模板拷貝至/etc下命名爲my.cnf作爲mariadb的配置文件

[root@webmysql]# scp support-files/my-large.cnf /etc/my.cnf

[root@webmysql]# vim /etc/my.cnf    //配置下面幾項參數,入沒有需手動添加

thread_concurrency= 8     //此處改爲服務器cpu核心數的2倍

//在[mysqld]配置池中添加下面三項參數:

datadir =/mydata/data

innodb_file_per_table= yes

skip_name_resolve= yes

 

爲mariadb提供服務管理腳本,mariadb自帶有服務管理腳本,拷貝至/etc/rc.d/init.d/下即可

[root@webmysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld

 

 

啓動mariadb,並運行mariadb的安全初始化腳本,完成初始化配置,爲root添加密碼等操作:

[root@webmysql]# service mysqld start

[root@webmysql]# bin/mysql_secure_installation 

 

將mariadb添加至開機自動啓動

[root@webmysql]# chkconfig --add mysqld

[root@webmysql]# chkconfig mysqld on

 

將mariadb目錄添加至環境變量

[root@webmysql]# vim /etc/profile.d/mariadb.sh

exportPATH=/usr/local/mysql/bin:$PATH

 

編譯安裝php

 

需要的源碼包:php-5.6.13.tar.bz2   

1、解決依賴關係:(事先配置好yum源)

[[email protected]]# yum install -y libmcrypt-devel mhash libxml2-devel bzip2-devel

 

2、安裝php

[root@web~]# tar xf php-5.6.13.tar.bz2 

[root@php_mariadb ~]# cd php-5.6.13

[[email protected]]# ./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

// --enable-fpm    此項參數最爲關鍵。是表明讓php運行爲單獨的服務

[[email protected]]# make -j 4 && make install    //開啓多線程編譯安裝

 

3、提供php的配置文件:php源碼包中自帶配置文件模板,由於剛纔編譯安裝時指定了php啓動掃描配置文件的路徑爲/etc/php.d

因此:

[[email protected]]# cp php.ini-production /etc/php.d/php.ini

 

4、位php提供服務管理腳本:php源碼包中自帶

[[email protected]]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm

[[email protected]]# chmod +x /etc/rc.d/init.d/php-fpm    //爲其賦予可執行權限

[[email protected]]# chkconfig --add php-fpm         //添加至開機自動啓動項

[[email protected]]# chkconfig php-fpm on    //開機自動啓動

 

5、爲fpm提供配置文件

[[email protected]]# cp /usr/local/php/etc/php-fpm.conf.default/usr/local/php/etc/php-fpm.conf

[[email protected]]# vim /usr/local/php/etc/php-fpm.conf    //編輯配置文件,編輯如下幾項

pid =run/php-fpm.pid

pm.max_children= 50     //服務啓動的最大進程數

pm.start_servers= 10    //開啓服務是啓動的進程數

pm.min_spare_servers= 5    //最小空閒進程數

pm.max_spare_servers= 10    //最大空閒進程數

 

6、修改httpd配置文件

啓用如下兩個模塊:

LoadModuleproxy_module modules/mod_proxy.so

LoadModuleproxy_fcgi_module modules/mod_proxy_fcgi.so

//在Apache httpd 2.4以後已經專門有一個模塊針對FastCGI的實現,此模塊爲mod_proxy_fcgi.so,它其實是作爲mod_proxy.so模塊的擴充,因此,這兩個模塊都要加載

添加如下兩項參數,在Directory中添加;若想使此項對虛擬主機生效,需添加至虛擬主機內部 

ProxyRequestsOff

ProxyPassMatch^/(.*\.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1

修改   DirectoryIndex index.php index.html

添加:

   AddType application/x-httpd-php .php                     

   AddType application/x-httpd-php-source .phps  

 

 

7、重啓httpd24,編輯php測試

[[email protected]]# vim /usr/local/apache/htdocs/index.php

 

<?php

       $conn=mysql_connect('127.0.0.1','root','root');

       if ($conn)

               echo "OK";

       else

               "Failure";

       phpinfo();

?>

 


8、在瀏覽器輸入url進行測試:

wKiom1YCMGTy-EoPAAEwOoEj0b4793.jpg

至此,php的fpm工作機制已搭建完成


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章