LAMP——httpd 2.4.20 + mysql-5.6.26 + php-5.6.22編譯安裝過程

httpd 2.4.20 + mysql-5.6.26 + php-5.6.22編譯安裝過程:
php

資源準備html

系統:centos6.5
mysql

PHP:wget http://docs.php.net/distributions/php-5.6.22.tar.gzlinux

MySQL:wget http://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.26.tar.gz正則表達式

APACHE:wget http://mirrors.noc.im/apache//httpd/httpd-2.4.20.tar.gzsql

Xcache:wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz數據庫

APR: wget http://mirrors.cnnic.cn/apache//apr/apr-1.5.2.tar.gzapache

        wget http://mirrors.cnnic.cn/apache//apr/apr-util-1.5.4.tar.gzvim

1、編譯安裝apachecentos

一、解決依賴關係

httpd-2.4.20須要較新版本的apr和apr-util,所以須要事先對其進行升級。升級方式有兩種,一種是經過源代碼編譯安裝,一種是直接升級rpm包。這裏選擇使用編譯源代碼的方式進行

wget http://mirrors.cnnic.cn/apache//apr/apr-1.5.2.tar.gz

wget http://mirrors.cnnic.cn/apache//apr/apr-util-1.5.4.tar.gz


(1) 編譯安裝apr

# tar zxf apr-1.5.2.tar.gz

# cd apr-1.5.2

# ./configure --prefix=/usr/local/apr

# make && make install

(2) 編譯安裝apr-util

# tar zxf apr-util-1.5.4.tar.gz

# cd apr-util-1.5.4

# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

# make && make install

附:apache官方對APR的介紹:

The mission of the Apache Portable Runtime (APR) project is to create and maintain software libraries that provide a predictable and consistent interface to underlying platform-specific implementations. The primary goal is to provide an API to which software developers may code and be assured of predictable if not identical behaviour regardless of the platform on which their software is built, relieving them of the need to code special-case conditions to work around or take advantage of platform-specific deficiencies or features.

(3) httpd-2.4.20編譯過程也要依賴於pcre-devel軟件包,須要事先安裝。此軟件包系統光盤自帶,所以,找到並安裝便可。

二、編譯安裝httpd-2.4.20

首先下載httpd-2.4.20到本地然後執行以下命令進行編譯安裝過程:

# tar zxf httpd-2.4.20.tar.gz

# cd httpd-2.4.20

# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-deflate--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

# make && make install


httpd編譯選項:

--prefix=/usr/local/apache

--sysconfdir=/etc/httpd/

--enable-so(支持動態共享模塊,沒有此項的話php沒法以模塊方式與httpd結合工做)

--enable-ssl(支持https

--enable-deflate(響應client時將結果壓縮,節約帶寬)

--enable-proxy-fcgi(若httpdphp結合使用FastCGI此項要啓用)

--enable-mpm-shared=all

--with-mpm=event(設置默認是哪一種,不指默認是event

--enable-cgidthread MPMs

--enable-cgi(非thread

--enable-rewrite(支持URL重寫)

--enable-modules=most(編譯FastCGI,後續要手工啓用)

--enable-mods-shared=most

--with-apr=/usr/local/apr

--with-apr-util=/usr/local/apr-util



錯誤:configure: error: pcre-config for libpcre not found

解決:

#yum  -y  install pcre-devel(Perl Compatible Regular Expressions是一個Perl庫,包括 perl兼容的正則表達式庫,devel包含普通包,只比普通包多了頭文件,動態連接庫的話兩種包都有,編譯的時候若是須要用到這個庫,那麼須要安裝這個庫的devel,由於須要頭文件)

錯誤:configure: error: MPM most does not support dynamic loading.

解決:--enable-mpm-shared=all

錯誤:啓動服務時undefined symbol:apr……

--with-included-apr --with-apr=/usr/local/apr/bin/apr-1-config--with-apr-util=/usr/local/apr-util/bin/apu-1-config(指向具體位置)



補充:

(1)構建MPM爲靜態模塊

在所有平臺中,MPM均可以構建爲靜態模塊。在構建時選擇一種MPM,連接到服務器中。若是要改變MPM,必須從新構建。爲了使用指定的MPM,請在執行configure腳本 時,使用參數 --with-mpm=NAME。NAME是指定的MPM名稱。編譯完成後,可使用 ./httpd -l 來肯定選擇的MPM。 此命令會列出編譯到服務器程序中的全部模塊,包括 MPM。

(2)構建 MPM 爲動態模塊

在Unix或相似平臺中,MPM能夠構建爲動態模塊,與其它動態模塊同樣在運行時加載。 構建 MPM 爲動態模塊容許經過修改LoadModule指令內容來改變MPM,而不用從新構建服務器程序。在執行configure腳本時,使用--enable-mpms-shared選項便可啓用此特性。當給出的參數爲all時,全部此平臺支持的MPM模塊都會被安裝。還能夠在參數中給出模塊列表。默認MPM,能夠自動選擇或者在執行configure腳本時經過--with-mpm選項來指定,而後出如今生成的服務器配置文件中。編輯LoadModule指令內容能夠選擇不一樣的MPM。

三、修改httpd的主配置文件,設置其Pid文件的路徑

編輯vim /etc/httpd/httpd.conf,添加以下行便可:

PidFile  "/var/run/httpd.pid"

四、提供SysV服務腳本/etc/rc.d/init.d/httpd,內容以下:

#!/bin/bash

#

# 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

httpd=${HTTPD-/usr/local/apache/bin/httpd}

prog=httpd

pidfile=${PIDFILE-/var/run/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

然後爲此腳本賦予執行權限:

# chmod +x /etc/rc.d/init.d/httpd

加入服務列表:

# chkconfig --add httpd

接下來就能夠啓動服務進行測試了。

2、安裝mysql-5.5.26

一、準備數據存放的文件系統

新建一個邏輯卷,並將其掛載至特定目錄便可。這裏再也不給出過程。

這裏假設其邏輯卷的掛載目錄爲/mydata,然後須要建立/mydata/data目錄作爲mysql數據的存放目錄。

二、新建用戶以安全方式運行進程:

# groupadd -r mysql

# useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql

# chown -R mysql:mysql /mydata/data

三、安裝並初始化mysql-5.5.26

首先下載平臺對應的mysql版本至本地,這裏是32位平臺,所以,選擇的爲mysql-5.5.28-linux2.6-86.tar.gz

# tar xf mysql-5.5.28-linux2.6-86.tar.gz -C /usr/local

# cd /usr/local/

# ln -sv mysql-5.5.28-linux2.6-i686  mysql

# cd mysql 

#cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DDEFAULT_CHARSET=utf8  -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS:STRING=all -DWITH_DEBUG=0 -DWITH_SSL=yes -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1


#chown -R mysql:mysql  .

# scripts/mysql_install_db --user=mysql --datadir=/mydata/data  --basedir=/usr/local/mysql

# chown -R root  .

四、爲mysql提供主配置文件:

# cd /usr/local/mysql

cp support-files/my-default.cnf /etc/my.cnf

並修改此文件中thread_concurrency的值爲你的CPU個數乘以2,好比這裏使用以下行:

thread_concurrency = 2

另外還須要添加以下行指定mysql數據文件的存放位置:

datadir = /mydata/data

五、爲mysql提供sysv服務腳本:

# cd /usr/local/mysql

# cp support-files/mysql.server  /etc/rc.d/init.d/mysqld

# chmod +x /etc/rc.d/init.d/mysqld

添加至服務列表:

# chkconfig --add mysqld

# chkconfig mysqld on

vim /etc/my.cnf

[mysqld]

# Remove leading # and set to the amount of RAM for the most important data

# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.

# innodb_buffer_pool_size = 128M

# Remove leading # to turn on a very important data integrity option: logging

# changes to the binary log between backups.

# log_bin

# These are commonly set, remove the # and set as required.

basedir = /usr/local/mysql

datadir = /mydata/data

port = 3306

# server_id = .....

socket = /var/run/mysqld/mysqld.pid

去掉如上行的註釋

[root@localhost mysql]# service mysqld start

Starting MySQL....... SUCCESS!

然後就能夠啓動服務測試使用了。

爲了使用mysql的安裝符合系統使用規範,並將其開發組件導出給系統使用,這裏還須要進行以下步驟:

六、輸出mysql的man手冊至man命令的查找路徑:

編輯/etc/man.config,添加以下行便可:

MANPATH  /usr/local/mysql/man

七、輸出mysql的頭文件至系統頭文件路徑/usr/include:

這能夠經過簡單的建立連接實現:

# ln -sv /usr/local/mysql/include  /usr/include/mysql

八、輸出mysql的庫文件給系統庫查找路徑:

# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf

然後讓系統從新載入系統庫:

# ldconfig

九、修改PATH環境變量,讓系統能夠直接使用mysql的相關命令。具體實現過程這裏再也不給出。

3、編譯安裝php-5.6.22

一、解決依賴關係:

請配置好yum源(能夠是本地系統光盤)後執行以下命令:

# yum -y groupinstall "X Software Development" 

若是想讓編譯的php支持mcrypt擴展,此處還須要下載以下包並安裝之:

yum -y install libmcrypt* bzip2* libjpeg* pcre* png*

wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz

二、編譯安裝php-5.6.22

首先下載源碼包至本地目錄,下載位置:wget http://docs.php.net/distributions/php-5.6.22.tar.gz

# tar zvxf php-5.6.22.tar.gz

# cd php-5.6.22

# ./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 --with-bz2 --with-curl --with-gd   --with-mhash --with-mcrypt --enable-fpm --enable-sockets --enable-sysvshm --enable-fpm --enable-sockets --enable-sysvshm  --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd


報錯:

configure: error: mcrypt.h not found. Please reinstall libmcrypt.

解決代碼以下:

wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz
tar zxf libmcrypt-2.5.7.tar.gz
cd libmcrypt-2.5.7
./configure
make && make install


說明:

一、這裏爲了支持apache的worker或event這兩個MPM,編譯時使用了--enable-maintainer-zts選項。

二、若是使用PHP5.3以上版本,爲了連接MySQL數據庫,能夠指定mysqlnd,這樣在本機就不須要先安裝MySQL或MySQL開發包了。mysqlnd從php 5.3開始可用,能夠編譯時綁定到它(而不用和具體的MySQL客戶端庫綁定造成依賴),但從PHP 5.4開始它就是默認設置了。

# ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd


# make

# make test

# make intall

爲php提供配置文件:

# cp php.ini-production /etc/php.ini

三、 編輯apache配置文件httpd.conf,以apache支持php

 # vim /etc/httpd/httpd.conf

 一、添加以下二行

AddType application/x-httpd-php  .php

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

 二、定位至DirectoryIndex index.html 

   修改成:

    DirectoryIndex  index.php  index.html

然後從新啓動httpd,或讓其從新載入配置文件便可測試php是否已經能夠正常使用。

4、安裝xcache,爲php加速:

一、安裝

# tar xf xcache-3.2.0..tar.gz

# cd xcache-3.2.0

# /usr/local/php/bin/phpize

#phpize --clean && phpize

#./configure --enable-xcache  --enable-xcache-coverager --enable-xcache-optimizer  --with-php-config=/usr/bin/php-config

# make && make install

安裝結束時,會出現相似以下行:

Build complete.

Don't forget to run 'make test'.

Installing shared extensions:     /usr/lib64/php/modules/


二、編輯php.ini,整合php和xcache:

首先將xcache提供的樣例配置導入php.ini

# mkdir /etc/php.d

# cp xcache.ini /etc/php.d

說明:xcache.ini文件在xcache的源碼目錄中。

接下來編輯/etc/php.d/xcache.ini,找到zend_extension開頭的行,修改成以下行:

zend_extension = /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xcache.so

注意:若是php.ini文件中有多條zend_extension指令行,要確保此新增的行排在第一位。

5、啓用服務器狀態

mod_status模塊可讓管理員查看服務器的執行狀態,它經過一個HTML頁面展現了當前服務器的統計數據。這些數據一般包括但不限於:

(1) 處於工做狀態的worker進程數;

(2) 空閒狀態的worker進程數;

(3) 每一個worker的狀態,包括此worker已經響應的請求數,及由此worker發送的內容的字節數;

(4) 當前服務器總共發送的字節數;

(5) 服務器自上次啓動或重啓以來至當前的時長;

(6) 平均每秒鐘響應的請求數、平均每秒鐘發送的字節數、平均每一個請求所請求內容的字節數;

啓用狀態頁面的方法很簡單,只須要在主配置文件中添加以下內容便可:

<Location /server-status>

    SetHandler server-status

    Require all granted

</Location>

須要提醒的是,這裏的狀態信息不該該被全部人隨意訪問,所以,應該限制僅容許某些特定地址的客戶端查看。好比使用Require ip 172.16.0.0/16來限制僅容許指定網段的主機查看此頁面。

第二部分、配置apache-2.4.20與fpm方式的php-5.6.22

1、apache、MySQL的安裝與前一部分相同;請根據其進行安裝;

2、編譯安裝php-5.6.22

一、解決依賴關係:

yum -y install php-fpm

請配置好yum源(能夠是本地系統光盤)後執行以下命令:

若是想讓編譯的php支持mcrypt擴展下載包並安裝:

libmcrypt-2.5.7-5.el5.i386.rpm

libmcrypt-devel-2.5.7-5.el5.i386.rpm

mhash-0.9.9-1.el5.centos.i386.rpm

mhash-devel-0.9.9-1.el5.centos.i386.rpm

二、編譯安裝php-5.6.22

首先下載源碼包至本地目錄

# tar xf php-5.6.22.tar.gz

# cd php-5.6.22

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

說明:若是使用PHP5.3以上版本,爲了連接MySQL數據庫,能夠指定mysqlnd,這樣在本機就不須要先安裝MySQL或MySQL開發包了。mysqlnd從php 5.3開始可用,能夠編譯時綁定到它(而不用和具體的MySQL客戶端庫綁定造成依賴),但從PHP 5.4開始它就是默認設置了。

# ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd

# make

# make intall

爲php提供配置文件:

# cp php.ini-production /etc/php.ini

三、配置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/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf 

最新版本PHP在sapi/fpm/php-fpm.conf已經存在不須要改動

編輯php-fpm的配置文件:

# vim /usr/local/php/etc/php-fpm.conf

配置fpm的相關選項爲你所須要的值,並啓用pid文件(以下最後一行):

pm.max_children = 50

pm.start_servers = 5

pm.min_spare_servers = 2

pm.max_spare_servers = 8

pid = /usr/local/php/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 


3、配置httpd-2.4.20

一、啓用httpd的相關模塊

vim /etc/httpd/httpd.conf

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

119行

LoadModule proxy_module modules/mod_proxy.so

123行

LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

二、配置虛擬主機支持使用fcgi

在相應的虛擬主機中添加相似以下兩行。

    ProxyRequests Off

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

例如:

<VirtualHost *:80>

    DocumentRoot "/www/magedu.com"

    ServerName magedu.com

    ServerAlias www.geek3.com

    ProxyRequests Off

    ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/www/magedu.com/$1

    <Directory "/www/magedu.com">

        Options none

        AllowOverride none

        Require all granted

    </Directory>

</VirtualHost>

ProxyRequests Off:關閉正向代理

ProxyPassMatch:把以.php結尾的文件請求發送到php-fpm進程,php-fpm至少須要知道運行的目錄和URI,因此這裏直接在fcgi://127.0.0.1:9000後指明瞭這兩個參數,其它的參數的傳遞已經被mod_proxy_fcgi.so進行了封裝,不須要手動指定。

三、編輯apache配置文件httpd.conf,讓apache能識別php格式的頁面,並支持php格式的主頁

 # vim /etc/httpd/httpd.conf

 一、添加以下二行

   AddType application/x-httpd-php  .php

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

 二、定位至DirectoryIndex index.html 

   修改成:

    DirectoryIndex  index.php  index.html

補充:Apache httpd 2.4之前的版本中,要麼把PHP做爲Apache的模塊運行,要麼添加一個第三方模塊支持PHP-FPM實現。

相關文章
相關標籤/搜索