本次實驗目的:實現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進行測試:
至此,php的fpm工作機制已搭建完成