LAMP編譯介紹一、 php以模塊化的方式結合apache工作

一、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

用到的軟件安裝包爲:

wKiom1YCawjzMnhhAAEdog4uLv8523.jpg

安裝順序: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的,因此需要事先對其進行升級

wKiom1YCbBvRlGMcAAB_Di8zF04240.jpg

(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

wKiom1YCbsDDJhBkAACzxNIAk1Y587.jpg

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數據的存放目錄。

wKiom1YCcO3jhzOQAANKpgsrfJA248.jpg

[root@localhost ~]# partx -a /dev/sda5

wKiom1YCcRCiEdi5AADFqLgIzks044.jpg

[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

wKiom1YCcSPTEfCRAABr3VaOQJc005.jpg

wKiom1YCcTSy91KeAAB-jZ97CVw011.jpg

[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/

wKioL1YCdOLBkhjNAAXc1TbgStQ954.jpg


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

wKioL1YCdQnxJjSbAAECEd09-C0113.jpg而後就可以啓動服務測試使用了。

wKioL1YCdTXyaxwDAAHIoV62NgE581.jpg

爲了使用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

wKiom1YCdVOhz5EPAABbpLWLNVI313.jpg


而後重新啓動httpd,測試mysql和php是否已經可以正常使用。

wKioL1YCdiDw3BDrAACktN6Ruvg286.jpg   //測試代碼

wKioL1YCdiHCPIdIAALNcV3tHz0144.jpg


看到上圖說明測試正常!!


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設置密碼,刪除匿名用戶

wKiom1YCdwrw750JAALHRg-zWkM050.jpg

使用ab命令進行壓力測試,如下圖所示

wKiom1YCd22QS4_fAAN6UtFNjo0510.jpg


三、安裝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
安裝結束時,會出現類似如下行:

wKiom1YCeA-Dcb-XAADHpeClA9A247.jpg


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服務

wKioL1YCeJnQrIiCAAEfATd5gz8960.jpg

wKioL1YCeNzgiw6pAAIu62j466w731.jpg

出現上圖說明php以加速,接下來再使用ab進行同樣測試,對比效果很明顯

wKiom1YCeQ7CTE6KAAKZcfJII78254.jpg

至此~ php以模塊的方式結合apache工作介紹完畢!!

下次講解php以fpm的方式結合apache工作,請期待!!


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