在php的论坛上一直存在着一个现象,虽说LAMP的搭建,很多人都会。但一般关于LAMP的搭建的文章多半会置顶,被视为精华贴,而且会被各个论坛转来转去。可见不会的也不少呀! 
玩php也一年多了,linu也早在一年前就接触了,但后来转到Windows上开发,lamp,也就生疏很多了。 
网上各种各样的amp的集成版本多的去了,抓来就用,而且方便,像Appserv. xampp,不错对于初学者他们已经够用了,但往后像添加什么模块,增加一些高级特性,就配置起来就麻烦了,鉴于这些原因,就又转到LAMP平台了。 

前两天在 fedora6上自己搭建了LAMP + Zend +phpMyAdmin,虽说网上文档挺多的,在安装的时候还是出了很多意想不到的问题。在网上找资料的时候,碰到很多网友碰到同类问题。现在费劲周折终于搞定了。现在整理出来,希望对后来者有所帮助,闲话少说,开始吧! 
建议在安装前卸载redhat或dedora自带的apache ,php, mysql,否则安装的是后会出问题(主要针对基于redhat的linux)。

如果采用RPM包安装,安装路径应在 /etc/httpd目录下
apache配置文件:/etc/httpd/conf/httpd.conf
Apache模块路径:/usr/sbin/apachectl
web目录:/var/www/html
如果采用源代码安装,一般默认安装在/usr/local/apache2目录下

php:
如果采用RPM包安装,安装路径应在 /etc/目录下
php的配置文件:/etc/php.ini
如果采用源代码安装,一般默认安装在/usr/local/lib目录下
php配置文件: /usr/local/lib/php.ini
或/usr/local/php/etc/php.ini

mysql:
如果采用RPM包安装,安装路径应在/usr/share/mysql目录下
mysqldump文件位置:/usr/bin/mysqldump
mysqli配置文件:
/etc/my.cnf或/usr/share/mysql/my.cnf
mysql数据目录在/var/lib/mysql目录下
如果采用源代码安装,一般默认安装在/usr/local/mysql目录下 

LAMP 安装说明 
php5.0 要求libxml2-2.6.0以上更高的版本,这一解析器提供php5.0 新的XML API 
=============================================================================================================================================== 
安装 libxml2 
tar -zxvf libxml2-2.6.19.tar.gz 
cd libxml2-2.6.19 
./configure --prefix=/usr/local/libxml2 
make 
make install 
这一步结束时,libxml2被安装在/usr/local/下。 

安装 zlib 
tar -zxvf zlib-1.2.3.tar.gz 
cd zlib-1.2.3 
./configure --prefix=/usr/local/zlib 
make 
make install 
这一步结束时,zlib被安装在/usr/local/下。 
=========== 
安装 libpng 
tar -zxvf libpng-1.2.10.tar.gz 
cd libpng-1.2.10 
cp scripts/makefile.linux makefile 
make 
make install 
注意:这里的makefile不是用./configure 生成的,而是直接从script/目录里拷一个 
这一步结束时,zlib被安装在/usr/local/lib下 

安装 freetype 
tar -zxvf freetype-2.2.1.tar.gz 
cd freetype-2.2.1 
./configure --prefix=/usr/local/freetype 
make 
make install 
这一步结束时,freetype被安装在/usr/local/lib下 

安装 jpeg6 
建立目录 
mkdir /usr/local/jpeg6 
mkdir /usr/local/jpeg6/bin 
mkdir /usr/local/jpeg6/lib 
mkdir /usr/local/jpeg6/include 
mkdir /usr/local/jpeg6/man 
mkdir /usr/local/jpeg6/man/man1 
tar -zxvf jpegsrc.v6b.tar.gz 
cd jpeg-6b 
./configure --prefix=/usr/local/jpeg6/ --enable-shared --enable-static 
make 
make install 
注意:这里./configure一定要带--enable-shared参数,不然,不会生成共享库 
============================================================================================================================================= 
安装 gd 
tar -zxvf gd-2.0.33.tar.gz 
cd gd-2.0.33 
./configure --prefix=/usr/local/gd --with-png=/usr/local/lib --with-freetype=/usr/local/freetype --with-jpeg=/usr/local/jpeg6 
make && make install 
============================================================================================================================================== 
安装 curl 支持ftp库函数 
tar -zxvf curl-7.15.0.tar.gz 
cd curl-7.15.0 
./configure --prefix=/usr/local/curl 
make && make install 
=============================================================================================================================================== 
安装 Apache2 
以Apache使用php有两种方式:作为动态模块,其在运行状态时可以载入到web服务器, 
或者作为静态模块,其可直接编译到web服务器代码中。对于文本,我们着重于第一种方式。 
为了能让Apache2.0模块使php动态载入,Apache服务器必须以动态共享对象(DSO,Dynamic Shared Object)编译。 
可以通过传递 --enable-so 参数到 Apache 2 
tar -jxvf httpd-2.2.2.tar.bz2 
cd httpd-2.2.2 
./configure --prefix=/usr/local/apache2 --enable-so --enable-dav --enable-rewrite make && make install 
//切记要支持Zend Optimizer不可加 --with-mpm=worker选项 
这一过程将会设置,编译,以及将服务器安装到/usr/local/下。 
启动apache守护进程: 
/usr/local/apache2/bin/apachectl start (开启 start 关闭 stop 重启 restart) 
打开浏览器,输入http://localhost 就能看到一个apache的欢迎页面了,这表示我们已经成功的安装了apache2 。 
 
安装 Mysql5 
groupadd mysql 
useradd -g mysql mysql 

tar -zxvf mysql-5.0.17.tar.gz 
cd mysql-5.0.17 
./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static --with-extra-charsets=all --with-big-tables --with-charset=utf8 --with-collation=utf8_unicode_ci 
make 
make install 
cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf 
cd /usr/local/mysql/ 
bin/mysql_install_db --user=mysql 
chown -R root . 
chown -R mysql var 
chgrp -R mysql . 
启动服务: 
/usr/local/mysql/share/mysql/mysql.server start (启动start 关闭stop 重启restart) 
键入mysql回车就可已看到欢迎界面。说明我们已成功安装了mysql 
说明: 
--with-extra-charsets=all 对多语言支持 
--with-unix-socket-path=/usr/local/mysql/var/mysql.sock 这个是指定mysql服务启动后。联机套接字文件所处的位置和文件名,也就是说,如果mysql服务器成功启动后,就能在/usr/local /mysql/var.采用这一选项,通常会出错,建议不配置用默认的。默认会在/tmp/mysql.sock. 
目录中看到mysql.sock文件。 

如果编译时出现了以下错误: 
checking for tgetent in -ltermcap... no 
checking for termcap functions library... configure: error: No curses/termcap library found 
说明 curses/termcap 库没有安装 
去下载一个ncurses-5.6.tar.gz, 
wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.6.tar.gz 
tar zxvf ncurses-5.6.tar.gz 
cd ncurses-5.6 
./configure --prefix=/usr --with-shared --without-debug 
make 
make install clean 
然后再重新编译Mysql进行安装。 

1、 
mysql的自启动我解决了,在/etc/rc.d/rc.local里加 
/usr/local/mysql/bin/mysqld_safe -u mysql & 

2、 
cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysql 
chmod +x /etc/init.d/mysql 
chkconfig –level 345 mysql on 
/etc/init.d/mysql start 

=
安装 php5 
tar -zxvf php-5.1.6.tar.gz 
cd php-5.1.6 
./configure --prefix=/usr/local/php5 --with-apxs2=/usr/local/apache2/bin/apxs 
--with-config-file-path=/etc --with-libxml-dir=/usr/local/libxml2 
--with-zlib-dir=/usr/local/zlib --with-curl=/usr/local/curl 
--with-gd=/usr/local/gd --with-jpeg-dir=/usr/local/jpeg6 
--with-png-dir=/usr/local/lib --with-freetype-dir=/usr/local/freetype 
--with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config 
--with-openssl --enable-gd-native-ttf --enable-mbstring --enable-ftp 
--enable-bcmath --enable-sockets --enable-zip --enable-soap 
--enable-calendar //切记要支持Zend Optimizer不可加 --enable-debug选项 
make 
make install 
cp php.ini-dist /etc/php.ini 


编译php时出现 

./configure: /usr/local/apache2/bin/apxs: /replace/with/path/to/perl/interpreter: 
bad interpreter: No such file or directory 
这是找不到perl解释器的缘故。 
修改/usr/local/apache2/bin/apxs文件中: 
/replace/with/path/to/perl/interpreter 
把他替换成perl所在的路径如/opt/ActivePerl-5.8/bin/perl, 
(如果你下载的是active perl5.8的rpm,他默认安装路径是/opt/ActivePerl-5.8/bin/perl) 


============================================= 
整合apache2和php5 
apache 配置文件及目录是: 
/usr/local/apache2/conf/httpd.conf 
apache 默认存放主页的位置是: 
/usr/local/apache2/htdocs 
以下是配置文件里面的信息:(有的地方要做修改) 
ServerRoot "/usr/local/apache2" 
这是指定apache程序所在的目录,比如日志文件、配置文件等目录。 
DocumentRoot "/usr/local/apache2/htdocs" 
这个是存放网页的目录 
<Directory "/usr/local/apache2/htdocs"> 
这一句应该和DocumentRoot的目录保持一致。 
找到 DirectoryIndex index.html 
改为 DirectoryIndex index.html index.html.var index.htm index.php 
找到 AddType application/x-gzip .gz .tgz 
加 AddType application/x-httpd-php .php (注意空格) 
AddType application/x-httpd-php-source .phps 
添加 AddDefaultCharset utf8 使apache默认支持utf8字符集 
保存配置文件就重启apache 的守护进程。 
/usr/local/apache2/bin/apachectl restart 

下载源码包 make && make install 之后, apache 并不会自动往 init.d 里面添加自己的 httpd service。需要手工把 apache 安装目录的 bin/apachectl 拷贝一份到 /etc/init.d/httpd 。如果想让 httpd service 能够在不同的运行级别下都能自动启动,还需要 vi /etc/init.d/httpd ,在 #!/bin/sh 下面增加几行 chkconfig 需要的内容: 

# chkconfig: 2345 70 30 
# description: Apache is a World Wide Web server. It is used to serve \ 
# HTML files and CGI. 
# processname: httpd 

关键是 chkconfig: 2345 70 30 这一行,第一个数字 2345 表示让 apache 在 2345 这四个级别都自动运行;第二个数字 70 表示进程启动的优先级;第三个数字 30 表示进程停止的优先级。修改保存之后执行 /sbin/chkconfig httpd reset ,chkconfig 就自动在各个级别的 rc*.d 中增加 httpd 的 link 。要查看 chkconfig 是否 reset 正确,通过命令 /sbin/chkconfig --list httpd 就可以查看当前 httpd service 被配置在哪几个运行级别自启动。 

注意: 
每次更改配置文件。要重启服务。 
对存放网页的目录执行:命令chmod 755 目录名 或者 chmod -R 755 目录名 

编辑php.ini文件,找到 
;default_charset="iso-8859-1" 
增加一行:default_charset="utf8" 

以上步骤都执行完后。在/usr/local/apache2/htdocs/里编辑文件进行测试。 
phpinfo.php 
里面的内容: 
<?php 
phpinfo(); 
?> 
在浏览器地址栏中输入: 
http://localhost/phpinfo.php 
出现php说明页面说明安装成功。 
安装过程相当简单,网上很多这种文档,整理的也很详细,我就不多废话了。就具体就在fedora6下碰到的问题说明一下: 接下: =========================================================================================== 

安装时的问题及解决方法 

安装php5的过程中会自动在/usr/local/apache2/conf/httpd.conf里添加: 
LoadModule php5_module modules/libphp5.so 
重新启动apache报如下错误: 
httpd: Syntax error on line 53 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/modules/libphp5.so into server: /usr/local/apache/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied 
解决办法: 
chcon /usr/local/apache/modules/libphp5.so -t shlib_t 
原因是Linux有一个SELinux保护模式引起的。 
关闭SELINUX的方法: 
vi /etc/selinux/config 将SELINUX=enforcing 改成SELINUX=disabled 
保存,重起电脑即可. 
FC5 中的SELinux 代表了用户,程序以及进程间相互交流的主要变化。 

============================================= 
安装phpMyAdmin2.8.1 
unzip phpMyAdmin2.8.1.zip 
cp -r phpMyAdmin2.8.1 /usr/local/apache2/htdocs 
cd /usr/local/apache2/htdocs/phpMyAdmin2.8.1/libraries 
cp config.default.php ../config.inc.php 
gedit config.inc.php 
找到$cfg['Servers'][$i]['auth_type'] = 'config'; // Authentication method (config, http or cookie based)?一行(大概在71行)将值改为http 或 cookie,随自己喜欢 
================================================================================== 
安装Zend optimizer3.2.8 
这可能是最简单也是最容易出问题的地方(我在此吃尽苦头) 
tar -zxvf ZendOptimizer-3.2.8-linux-glibc21-i386.tar.gz 
cd ZendOptimizer-3.2.8-linux-glibc21-i386 
./install 
安装完后重启apache,在phpinfo.php的欢迎页面第二个域你会看到: 
--------------------------------------------------------------------------------------------------------------------------------------------------- 
This program makes use of the Zend Scripting Language Engine: 
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies 
with Zend Extension Manager v1.2.0, Copyright (c) 2003-2007, by Zend Technologies 
with Zend Optimizer v3.2.8, Copyright (c) 1998-2007, by Zend Technologies 
Zend logo 

执行 /usr/local/php5/bin/php -v 应该看到: 
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies 
with Zend Extension Manager v1.2.0, Copyright (c) 2003-2007, by Zend Technologies 
with Zend Optimizer v3.2.8, Copyright (c) 1998-2007, by Zend Technologies 

否则就是安张出问题了。可能是编译apache画蛇添足添加了--with-mpm=worker 没有用默认的prefork模块 
另一中可能就是编译php是加入了--enable-debug 
zend optimizer 需要apache(perfork only) php(no debug Mod)这些在Zend optimizer User`Gurde上有说明需特别注意了 
over 

由于本人水平有限,遗漏 过错之处欢迎大家指正 


让APACHE MYSQL 随系统启动: 
编辑/etc/rc.local文件 
# vi /etc/rc.local 
在文件中写入 
# 启动APACHE 
/usr/local/apache2/bin/httpd -k start 
# 启动MYSQL 
/usr/local/mysql/bin/mysqld_safe --user=mysql &

   老师给的案例  www.mageedu.com

  


httpd 2.4.9 + mysql-5.5.33 + php-5.4.26编译安装过程:


一、编译安装apache


1、解决依赖关系


httpd-2.4.9需要较新版本的apr和apr-util,因此需要事先对其进行升级。升级方式有两种,一种是通过源代码编译安装,一种是直接升级rpm包。这里选择使用编译源代码的方式进行,它们的下载路径为ftp://172.16.0.1/pub/Sources/new_lamp。


(1) 编译安装apr


# tar xf apr-1.5.0.tar.bz2

# cd apr-1.5.0

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

# make && make install


(2) 编译安装apr-util


# tar xf apr-util-1.5.3.tar.bz2

# cd apr-util-1.5.3

# ./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.9编译过程也要依赖于pcre-devel软件包,需要事先安装。此软件包系统光盘自带,因此,找到并安装即可。


2、编译安装httpd-2.4.9


首先下载httpd-2.4.9到本地,下载路径为ftp://172.16.0.1/pub/Sources/new_lamp。而后执行如下命令进行编译安装过程:


# tar xf httpd-2.4.9.tar.bz2

# cd httpd-2.4.9

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

# make && make install



补充:


(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。



3、修改httpd的主配置文件,设置其Pid文件的路径


编辑/etc/httpd/httpd.conf,添加如下行即可:

PidFile  "/var/run/httpd.pid"


4、提供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



接下来就可以启动服务进行测试了。



二、安装mysql-5.5.33


1、准备数据存放的文件系统


新建一个逻辑卷,并将其挂载至特定目录即可。这里不再给出过程。


这里假设其逻辑卷的挂载目录为/mydata,而后需要创建/mydata/data目录做为mysql数据的存放目录。


2、新建用户以安全方式运行进程:


# groupadd -r mysql

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

# chown -R mysql:mysql /mydata/data


3、安装并初始化mysql-5.5.33


首先下载平台对应的mysql版本至本地,这里是32位平台,因此,选择的为mysql-5.5.33-linux2.6-i686.tar.gz,其下载位置为ftp://172.16.0.1/pub/Sources/mysql-5.5。


# tar xf mysql-5.5.33-linux2.6-i686.tar.gz -C /usr/local

# cd /usr/local/

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

# cd mysql 


# chown -R mysql:mysql  .

# scripts/mysql_install_db --user=mysql --datadir=/mydata/data

# chown -R root  .


4、为mysql提供主配置文件:


# cd /usr/local/mysql

# cp support-files/my-large.cnf  /etc/my.cnf


并修改此文件中thread_concurrency的值为你的CPU个数乘以2,比如这里使用如下行:

thread_concurrency = 2


另外还需要添加如下行指定mysql数据文件的存放位置:

datadir = /mydata/data



5、为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


而后就可以启动服务测试使用了。



为了使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用,这里还需要进行如下步骤:

6、输出mysql的man手册至man命令的查找路径:


编辑/etc/man.config,添加如下行即可:

MANPATH  /usr/local/mysql/man


7、输出mysql的头文件至系统头文件路径/usr/include:


这可以通过简单的创建链接实现:

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


8、输出mysql的库文件给系统库查找路径:


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


而后让系统重新载入系统库:

# ldconfig


9、修改PATH环境变量,让系统可以直接使用mysql的相关命令。具体实现过程这里不再给出。



三、编译安装php-5.4.26


1、解决依赖关系:


请配置好yum源(系统安装源及epel源)后执行如下命令:

# yum -y groupinstall "Desktop Platform Development" 

# yum -y install bzip2-devel libmcrypt-devel



2、编译安装php-5.4.26


首先下载源码包至本地目录,下载位置ftp://172.16.0.1/pub/Sources/new_lamp。


# tar xf php-5.4.26.tar.bz2

# cd php-5.4.26

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



说明:

1、这里为了支持apache的worker或event这两个MPM,编译时使用了--enable-maintainer-zts选项。

2、如果使用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


3、 编辑apache配置文件httpd.conf,以apache支持php

 

 # vim /etc/httpd/httpd.conf

 1、添加如下二行

   AddType application/x-httpd-php  .php

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


 2、定位至DirectoryIndex index.html 

   修改为:

    DirectoryIndex  index.php  index.html


而后重新启动httpd,或让其重新载入配置文件即可测试php是否已经可以正常使用。



测试页面index.php示例如下:

    <?php

      $link = mysql_connect('127.0.0.1','root','mageedu');

      if ($link)

        echo "Success...";

      else

        echo "Failure...";


      mysql_close();

    ?>




四、安装xcache,为php加速:


1、安装

# tar xf xcache-3.0.3.tar.gz

# cd xcache-3.0.3

# /usr/local/php/bin/phpize

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

# make && make install


安装结束时,会出现类似如下行:

Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-zts-20100525/


2、编辑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指令行,要确保此新增的行排在第一位。


五、启用服务器状态


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来限制仅允许指定网段的主机查看此页面。



ab测试示例:未启用xcache和启用xcache后,对phpMyAdmin的主而面进行请求测试的结果如下所示:


测试环境:

  主机CPU:Core 2 Duo i3-3210

  内存大小:734MB


Requests per second:    36.38 [#/sec] (mean)

Time per request:       274.871 [ms] (mean)

Time per request:       27.487 [ms] (mean, across all concurrent requests)



Requests per second:    144.23 [#/sec] (mean)

Time per request:       69.332 [ms] (mean)

Time per request:       6.933 [ms] (mean, across all concurrent requests)




第二部分、配置apache-2.4.9与fpm方式的php-5.4.26


一、apache、MySQL的安装与前一部分相同;请根据其进行安装;


二、编译安装php-5.4.26


1、解决依赖关系:


请配置好yum源(可以是本地系统光盘)后执行如下命令:

# yum -y groupinstall "X Software Development" 


如果想让编译的php支持mcrypt扩展,此处还需要下载ftp://172.16.0.1/pub/Sources/ngnix目录中的如下两个rpm包并安装之:

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


2、编译安装php-5.4.26


首先下载源码包至本地目录,下载位置ftp://172.16.0.1/pub/Sources/new_lamp。


# tar xf php-5.4.26.tar.bz2

# cd php-5.4.26

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


3、配置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-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 


三、配置httpd-2.4.9


1、启用httpd的相关模块


在Apache httpd 2.4以后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩充,因此,这两个模块都要加载

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so



2、配置虚拟主机支持使用fcgi


在相应的虚拟主机中添加类似如下两行。

  ProxyRequests Off

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


http://www.magedu.com/admin/index.php


/web/host1/admin/index.php

fcgi://127.0.0.1:9000/web/hosts/admin/index.php



例如:

<VirtualHost *:80>

    DocumentRoot "/www/magedu.com"

    ServerName magedu.com

    ServerAlias www.magedu.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进行了封装,不需要手动指定。


3、编辑apache配置文件httpd.conf,让apache能识别php格式的页面,并支持php格式的主页

 

 # vim /etc/httpd/httpd.conf

 1、添加如下二行

   AddType application/x-httpd-php  .php

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


 2、定位至DirectoryIndex index.html 

   修改为:

    DirectoryIndex  index.php  index.html


补充:Apache httpd 2.4以前的版本中,要么把PHP作为Apache的模块运行,要么添加一个第三方模块支持PHP-FPM实现。