您好,登錄后才能下訂單哦!
一、PHP在Apache中有三種工作方式:
Apache模塊:
模塊模式是以mod_php5模塊的形式集成,此時mod_php5模塊的作用是接收Apache傳遞過來的PHP文件請求,并處理這些請求,然后將處理后的結果返回給Apache。Apache的模塊可以在運行的時候動態裝載,這意味著對服務器可以進行功能擴展而不需要重新對源代碼進行編譯,甚至根本不需要停止服務器;但是在動態加載之前,需要將模塊編譯成為動態鏈接庫。此時的動態加載就是加載動態鏈接庫。 Apache中對動態鏈接庫的處理是通過模塊mod_so來完成的,因此mod_so模塊不能被動態加載,它只能被靜態編譯進Apache的核心,這意味著它是隨著Apache一起啟動的。
CGI模式:
每當客戶端請求動態資源的時候,WEB服務器就請求操作系統生成一個新的CGI解釋器進程,CGI 的一個進程則處理完一個請求后退出,下一個請求來時再創建新進程。當然,這樣在訪問量很少沒有并發的情況也行。可是當訪問量增大,并發存在,這種方式就不適合了。
FPM模式:
PHP-FPM是一個簡單可靠的 FastCGI 進程管理器(FastCGI Process Manager),Apache 官方網站也提供了配置 Apache httpd 2.4.x 使用 mod_proxy_fcgi 和 PHP-FPM 運行 php 程序的基本方法和設置運行方式的介紹。
PHP-FPM 就意味著不用 Apache 內置的 mod_php,也就是要在 Apache 之外處理 php 程序的解釋運行問題。看起來是多引入了一個額外的程序 PHP-FPM,既占 CPU 又占內存。但是這樣一來,因為 Apache 可以專心處理除 php 之外的靜態網頁及元素,反而 httpd 進程本身占用的 CPU 和內存可以顯著降低,從而從整體上降低資源消耗。
PHP-FPM 監聽方式(接收 Apache 轉過去的處理 PHP 的請求的方式)有 2 種:
TCP socket (IP和port), Listen IP地址:9000
Unix Domain Socket(UDS),通常路徑指明socket的位置/path/to/unix/socket
二、LAMP編譯安裝過程
測試環境:CentOS 6.6---ip:192.168.1.100
用到的軟件安裝包為:
安裝順序:httpd-->mariadb-->php-->phpMyAdmin-->xcache
安裝前準備:1、iptables關閉 //對防火墻規則設置熟悉可忽略
2、將selinux設置為disabled
2.1、編譯安裝apache
1、解決依賴關系
httpd-2.4.10需要較新版本的apr-1.4+和apr-util-1.4+,而centos6.6系統的apr和apr-util版本是1.39的,因此需要事先對其進行升級
(1)安裝apr
[root@localhost ~]# tar xf apr-1.5.0.tar.bz2 [root@localhost ~]# cd apr-1.5.0 [root@localhost apr-1.5.0]# ./configure --prefix=/usr/local/apr [root@localhost apr-1.5.0]# make && make install
(2)安裝apr-util
[root@localhost ~]# tar xf apr-util-1.5.3.tar.bz2 [root@localhost ~]# cd apr-util-1.5.3 [root@localhost apr-util-1.5.3]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr [root@localhost apr-util-1.5.3]# make && make install
2、 httpd-2.4.10編譯過程也要依賴于pcre-devel軟件包,需要事先安裝
[root@localhost ~]# yum install -y pcre-devel [root@localhost ~]#tar xf httpd-2.4.10.tar.bz2 [root@localhost httpd-2.4.10]# cd httpd-2.4.10 [root@localhost httpd-2.4.10]#./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewriter --with-pcre --with-z --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=event [root@localhost httpd-2.4.10]# make && make install [root@localhost ~]# vim /etc/profile.d/httpd24.sh i[root@localhost ~]# . /etc/profile.d/httpd24.sh export PATH=/usr/local/apache/bin:$PATH [root@localhost ~]# vim /etc/httpd24/httpd.conf ServerName 192.168.1.100:80 [root@localhost ~]# apachectl start
3、為編譯安裝的httpd-2.4提供腳本,可參考rpm包安裝httpd服務腳本,做如下修改即可:
[root@localhost ~]# vim /etc/init.d/httpd24
[root@localhost ~]# chmod +x /etc/init.d/httpd24
# httpd Startup script for the Apache HTTP Server # # chkconfig: - 85 15 # description: Apache is a World Wide Web server. It is used to serve \ # HTML files and CGI. # processname: httpd # config: /etc/httpd/conf/httpd.conf # config: /etc/sysconfig/httpd # pidfile: /var/run/httpd.pid # Source function library. . /etc/rc.d/init.d/functions if [ -f /etc/sysconfig/httpd ]; then . /etc/sysconfig/httpd fi # Start httpd in the C locale by default. HTTPD_LANG=${HTTPD_LANG-"C"} # This will prevent initlog from swallowing up a pass-phrase prompt if # mod_ssl needs a pass-phrase from the user. INITLOG_ARGS="" # Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server # with the thread-based "worker" MPM; BE WARNED that some modules may not # work correctly with a thread-based MPM; notably PHP will refuse to start. # Path to the apachectl script, server binary, and short-form for messages. apachectl=/usr/local/apache/bin/apachectl //apachectl所在位置 httpd=${HTTPD-/usr/local/apache/bin/httpd} //httpd所在位置 prog=httpd pidfile=${PIDFILE-/usr/local/apache/logs/httpd.pid} //httpd.pid文件所在位置 lockfile=${LOCKFILE-/var/lock/subsys/httpd} RETVAL=0 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 10 $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=$? echo $"not reloading due to configuration syntax error" failure $"not reloading $httpd due to configuration syntax error" else killproc -p ${pidfile} $httpd -HUP RETVAL=$? fi echo } # See how we were called. case "$1" in start) start ;; stop) stop ;; status) status -p ${pidfile} $httpd RETVAL=$? ;; restart) stop start ;; condrestart) if [ -f ${pidfile} ] ; then stop start fi ;; reload) reload ;; graceful|help|configtest|fullstatus) $apachectl $@ RETVAL=$? ;; *) echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}" exit 1 esac exit $RETVAL |
2.2、通用二進制包安裝mariadb(mysql)
1、準備數據存放的文件系統; 假設其邏輯卷的掛載目錄為/mydata,而后需要創建/mydata/data目錄做為mysql數據的存放目錄。
[root@localhost ~]# partx -a /dev/sda5
[root@localhost ~]# yum install -y lvm2 [root@localhost ~]# pvcreate /dev/sda5 [root@localhost ~]# vgcreate vg0 /dev/sda5 [root@localhost ~]# lvcreate -L 8G -n mylv vg0
[root@localhost ~]# mkfs.ext4 /dev/vg0/mylv [root@localhost ~]# vim /etc/fstab /dev/vg0/mylv /mydata/data ext4 defaults 0 0 [root@localhost ~]# mkdir -pv /mydata/data mkdir: created directory `/mydata' mkdir: created directory `/mydata/data'
2、新建用戶以安全方式運行進程:
[root@localhost ~]# groupadd -r mysql [root@localhost ~]# useradd -r -g mysql -d /mydata/data mysql [root@localhost ~]# chown -R mysql.mysql /mydata/data/
3、安裝mysql并初始化
[root@localhost ~]# tar xf mariadb-5.5.43-linux-x86_64.tar.gz -C /usr/local/ [root@localhost ~]# cd /usr/local/ [root@localhost local]# ln -sv mariadb-5.5.43-linux-x86_64 mysql `mysql' -> `mariadb-5.5.43-linux-x86_64' [root@localhost local]# cd mysql [root@localhost mysql]# chown root.mysql ./* [root@localhost mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data/
4、為mysql提供主配置文件:
[root@localhost mysql]# cp support-files/my-innodb-heavy-4G.cnf /etc/my.cnf [root@localhost mysql]# vim /etc/my.cnf thread_concurrency = 4 cpu個數乘以2 datadir=/mydata/data innodb_file_per_table=on skip_name_resolve=on
5、為mysql提供sysv服務腳本:
[root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysqld [root@localhost mysql]# chmod +x /etc/init.d/mysqld
而后就可以啟動服務測試使用了。
為了使用mysql的安裝符合系統使用規范,并將其開發組件導出給系統使用,這里還需要進行如下步驟:
6、輸出mysql的man手冊至man命令的查找路徑:
[root@localhost ~]# vim /etc/man.config MANPATH /usr/local/mysql/man/
7、輸出mysql的頭文件至系統頭文件路徑/usr/include:
這可以通過簡單的創建鏈接實現:
[root@localhost ~]# ln -sv /usr/local/mysql/include /usr/include/mysql `/usr/include/mysql' -> `/usr/local/mysql/include'
8、輸出mysql的庫文件給系統庫查找路徑:
# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
而后讓系統重新載入系統庫:# ldconfig
9、修改PATH環境變量,讓系統可以直接使用mysql的相關命令。
[root@localhost ~]# vim /etc/profile.d/mysql.sh export PATH=/usr/local/mysql/bin:$PATH [root@localhost ~]# . /etc/profile.d/mysql.sh
2.3、編譯安裝php
1、解決依賴關系:
[root@localhost ~]# yum groupinstall -y "Development tools" "Server Platform Development" [root@localhost php-5.4.40]# yum install -y libxml2-devel [root@localhost php-5.4.40]# yum install bzip2-devel -y [root@localhost ~]# yum localinstall libmcrypt-2.5.7-1.2.el6.rf.x86_64.rpm [root@localhost ~]# yum localinstall libmcrypt-devel-2.5.7-1.2.el6.rf.x86_64.rpm
2、編譯安裝php-5.4.40
[root@localhost php-5.4.40]# ./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 [root@localhost php-5.4.40]#make && make install 說明: 1、這里為了支持apache的worker或event這兩個MPM,編譯時使用了--enable-maintainer-zts選項。 2、為php提供配置文件: [root@localhost php-5.4.40]# cp php.ini-production /etc/php.ini
3、 編輯apache配置文件httpd.conf,以apache支持php
[root@localhost ~]# cp /etc/httpd24/httpd.conf{,.bak} [root@localhost ~]# vim /etc/httpd24/httpd.conf AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps
而后重新啟動httpd,測試mysql和php是否已經可以正常使用。
//測試代碼
看到上圖說明測試正常!!
2.4、安裝phpMyAdmin對mariadb基于圖形界面的方式進行管理
[root@localhost ~]# unzip phpMyAdmin-4.0.5-all-languages.zip [root@localhost ~]# cp -r phpMyAdmin-4.0.5-all-languages /usr/local/apache/htdocs/ [root@localhost ~]# cd /usr/local/apache/htdocs/ [root@localhost htdocs]# ln -sv phpMyAdmin-4.0.5-all-languages pma [root@localhost ~]# mysql_secure_installation //給root設置密碼,刪除匿名用戶
使用ab命令進行壓力測試,如下圖所示
三、安裝xcache,為php加速
1、安裝xcache
[root@localhost ~]# tar xf xcache-3.2.0.tar.bz2 [root@localhost ~]# cd xcache-3.2.0 [root@localhost xcache-3.2.0]# /usr/local/php/bin/phpize [root@localhost xcache-3.2.0]# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config [root@localhost xcache-3.2.0]# make && make install 安裝結束時,會出現類似如下行:
2、編輯xcache.ini,整合php和xcache:
首先將xcache提供的樣例配置導入
[root@localhost xcache-3.2.0]# mkdir /etc/php.d [root@localhost xcache-3.2.0]# cp xcache.ini /etc/php.d [root@localhost xcache-3.2.0]# vim /etc/php.d/xcache.ini [root@localhost xcache-3.2.0]# service httpd24 reload //編輯后,重啟httpd服務
出現上圖說明php以加速,接下來再使用ab進行同樣測試,對比效果很明顯
至此~ php以模塊的方式結合apache工作介紹完畢!!
下次講解php以fpm的方式結合apache工作,請期待!!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。