编译安装Apache、php、xcache、FastCGI及相关整合

一:编译php工作在xcache模式下

在编译安装之前,要首先确保其安装环境,需要安装相关的开发环境的包组Development tools”和“Server Platform Development

Apache

1:安装apache需要先安装apr包和apr-util包,还依赖于pcre-devel包,所以我们要先安装所依赖的包。系统自带的apr和apr-util版本较老,我们这里需要手动去升级,升级的方式有2种,一种是直接升级rpm包,还有一种可以通过源码来进行编译,我们这里使用源码编译进行安装。我们以apr-1.4.6.tar.bz2apr-util-1.5.2.tar.bz2为例。

#yum -y install pcre-devel

(1) 编译安装apr

# tar xf apr-1.4.6.tar.bz2

# cd apr-1.4.6

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

# make && make install

(2) 编译安装apr-util

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

# cd apr-util-1.5.2

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

# make && make install

(3)编译安装apache

#tar xf httpd-2.4.6.tar.bz2

#cd httpd-2.4.6

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

# make && make install

各选项的意义:

--prefix=/usr/local/apache #指定httpd的安装路径

--sysconfdir=/etc/httpd24 #指定安装后配置文件的路径

--enable-so #这项是关键:支持动态模块装卸载,如果不写的话,php没办法以模块的方式编译成apache的模块了

--enable-ssl #支持https

--enable-cgi #支持cgi动态执行 

--enable-rewrite #支持url重写

--with-zlib #支持使用zlib库将数据发送到客户端之前进行压缩

--with-pcre #和依赖的pcre软件包相关

--with-apr=/usr/local/apr #依赖于apr告知apr的安装路径

--with-apr-util=/usr/local/apr-util #依赖于apr-util,告知其安装路径

--enable-modules=most #支持多数模块

--enable-mpms-shared=all #构建MPM为动态模块,将所有的模块都设为动态共享,可以在系统运行时加载

--with-mpm=prefork #指定安装的模块式prefork,如果安装后想要更改,可以再编辑LoadModule指令内容选择不同的模块。

2:为其提供服务脚本。

# cd /etc/rc.d/init.d/

# cp httpd httpd24 httpd的服务脚本为基础进行修改

#vim httpd24

找到以下选项的位置对其进行修改

编译安装Apache、php、xcache、FastCGI及相关整合

#chkconfig --add httpd24 添加httpd24服务

#chkconfig --list httpd24 查看服务的运行状态,默认是关闭的

如果想要设定自动开机启动:

#chkconfig httpd24 on

#service httpd24 start 启动服务

检查80端口是否处于监听状态

#ss -tanl

然后我们通过浏览器做访问测试。

PHP

注意:编译安装php之前,要确保apachemysql安装成功,因为php的有些选项依赖它们的某些文件。mysql在前面的博客中我们已经演示安装了,所以我们可以安装php了。

1:我们以php-5.4.19.tar.bz2为例

#tar xf php-5.4.19.tar.bz2

#cd php-5.4.19

在这个目录下, php.ini-development是在开发环境中建议使用的模板;php.ini-production是在生产环境中建议使用的模板。

编译的时候依赖于libmcrypt-develmhash-devel,所以我们先安装这两个包。

# yum install libmcrypt-devel mhash-devel

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

各选项的意义:

--prefix=/usr/local/php #指定安装路径

--with-mysql=/usr/local/mysql #指定mysql的安装路径

--with-openssl #支持加密功能

--with-mysqli=/usr/local/mysql/bin/mysql_config #指定mysql的高级接口

--enable-mbstring #支持多字节的字符

--with-freetype-dir #支持多种字体文件库

--with-jpeg-dir #支持jpeg图片格式

--with-png-dir #支持pnf图片格式

--with-zlib #支持使用zlib库将数据发送到客户端之前进行压缩

--with-libxml-dir=/usr #指定扩展标记语言库文件路径

--enable-xml #支持扩展标记语言

--enable-sockets #php可以基于sockets进行通信

--with-apxs2=/usr/local/apache/bin/apxs #指将php安装成apache的动态模块

--with-mcrypt #支持加密解密功能

-with-config-file-path=/etc #指定配置文件的路径,主配置文件php.ini放在这里

--with-config-file-scan-dir=/etc/php.d #指定主配置文件的从配置文件路径,这里放置一些以.ini 结尾的文件

--with-bz2 #支持bz2的压缩格式

--enable-maintainer-zts #取决于mpm所选择的模型,worker和event时,需要这个选项,而如果是prefork,就不需要了

在编译安装的过程中还提示有别的包需要安装,其中有libxml2,bzip2,所以我们还要安装libxml2-devel,bzip2-devel。

注意:当提示我们所依赖的包时,我们要安装包的devel的包!

#yum -y install libxml2-devel bzip2-devel

安装好了之后,再重新进行刚才执行错误的编译安装,这一步操作成功后,我们就快成功了。

接着编译:

#make && make install

至此php安装成功了。

2:由于我们安装的php还不能满足要求,所以还要修改它的配置文件。

# vim /etc/httpd24/httpd.conf

可以看到里面多了一个 modules/libphp5.so模块,有了这个模块,就可以解析php脚本了。此时php还不能识别php格式的网页,所以我们还要添加相关的配置。

找到AddType的相关说明添加选项:

AddType application/x-httpd-php .php

这样就能识别php结尾的网页了,还有些网页是以phps结尾的网页,如果也要识别这种格式的网页,那么我们还要添加选项:

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

我们要默认能识别的网页文件是以.php结尾的文件,还需要配置一些选项

找到Directorylndex的位置添加index.php

编译安装Apache、php、xcache、FastCGI及相关整合

我们需要测试一下,但是我们有两个版本httpd,一个是编译的,还有一个是rpm包的,所以我们还要编辑一些文件

#vim /etc/profile.d/httpd.sh

export PATH=/usr/local/apache/bin:$PATH

重新读取

# . /etc/profile.d/httpd.sh

这时候测试就能找到我们所编译安装的httpd

进行测试

#httpd -t

可以验证一下

#hash

然后重启服务

#service httpd24 restart

3:验证一下我们安装的php,在这里我们用主服务器验证,主服务器默认的网页的安装路径为/usr/local/apache/htdocs

我们可以在自己的目录下编辑网页

# mkdir /web/htdocs/ -pv

# vim /web/htdocs/index.php

编译安装Apache、php、xcache、FastCGI及相关整合

然后修改apache的主配置文件

#vim /etc/httpd24/httpd.conf

找到DocumentRoot的位置,编辑相关内容

#

DocumentRoot "/web/htdocs"

<Directory "/web/htdocs">

提供主配置文件

# cd php-5.4.19

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

重新启动使其生效

#service httpd24 restart

然后在浏览器上测试,显示我们所编辑的网页,测试成功。

Pma的配置设置

我们再安装一个软件能够基于图形化的界面进行管理

phpMyAdmin-3.5.1-all-languages.tar.bz2为例:

在这里启用基于虚拟主机的方式提供服务

首先启用虚拟主机,先创建pma放置的路径

# mkdir /web/htdocs/pma

# tar xf phpMyAdmin-3.5.1-all-languages.tar.bz2

# mv phpMyAdmin-3.5.1-all-languages/* /web/htdocs/pma

#cd /web/htdocs/pma

# cp config.sample.inc.php config.inc.php

# vim config.inc.php

编译安装Apache、php、xcache、FastCGI及相关整合

我们先生成随机数写在要求位置,最好用命令生成,

# openssl rand -hex 4

cc0d142f

接着配置虚拟主机

#cd /etc/httpd24

# vim httpd.conf

将中心主机注释掉

#DocumentRoot "/web/htdocs"

找到vhosts

# Virtual hosts

Include /etc/httpd24/extra/httpd-vhosts.conf <------- 启用的选项

# vim /etc/httpd24/extra/httpd-vhosts.conf

将以前的配置注释掉,编辑新的配置

编译安装Apache、php、xcache、FastCGI及相关整合

然后检查语法错误、重启服务。

#httpd -t

#service httpd24 restart

访问基于主机名,还要进行解析

编译安装Apache、php、xcache、FastCGI及相关整合

打开hosts文件编辑

172.16.4.5 pma.magedu.com

基于主机名访问:在浏览器中输入pma.magedu.com打开网页,输入用户名、密码就OK了。

XCache

XCachephp的加速器,可以提高php的性能

xcache-3.0.3.tar.bz2为例

1、安装

# tar xf xcache-3.0.1.tar.gz

# cd xcache-3.0.1

# /usr/local/php/bin/phpize <------- 识别当前模块

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

# make && make install

2、编辑php.ini,整合phpxcache

首先将xcache提供的样例配置导入php.ini

# mkdir /etc/php.d

# cp xcache.ini /etc/php.d

说明:xcache.ini文件在xcache的源码目录中。是一个样例文件。

重新启动识别配置文件

#service httpd24 restart

我们提供一个测试页

#vim /web/htdocs/pma/phptest.php

<?php

phpinfo();

?>

通过浏览器查看:pma.magedu.com/phptest.php

可以找到编辑的文件

进行压力测试

ulimit: 资源限定

ulimit -n 查看当前可以打开的最大数

ulimit -n 2000 设定可以打开2000

#ab -c 100 -n 1000 http://172.16.4.5/index.php

-c: 模拟的并发数

-n: 总的请求数

注意:xcache安装好之后用ab命令测试前,要手动请求几次以生成缓存

#curl 172.16.4.5

#ab -c 2 -n 10 http://172.16.4.5/index.php

#ab -c 3 -n 100http://172.16.4.5/index.php

可以对比xcache安装前后使用ab命令压力测试的结果,就可以体会到xcache对性能的提升有多大了。

二:编译php工作在FastCGI模式下

1:如果在另外一台服务器上安装,要保证安装apachemysql成功,这里我们就不演示了

因为我们在同一台服务器上编译安装,所以我们要将前面编译的php剥离

先停止httpd服务

#service httpd24 stop

#cd /etc/httpd24/

#vim httpd.conf

将相关的模块注释掉

#LoadModule php5_module modules/libphp5.so如果事先没有编译php,就没有这一步了。

我们将以前编译的php改名,

# mv php-5.4.19 php-5.4.19.module

2:重新解压编译安装

# tar xf php-5.4.19.tar.bz2

#cd php-5.4.19

--prefix=/usr/local/php --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d

前面我们编译的时候已经用过了这些路径,所以我们要将有冲突的路径修改一下,所以最终结果为:

# ./configure --prefix=/usr/local/php54 --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/php54 --with-config-file-scan-dir=/etc/php54/php.d --with-bz2

# make && make install

php提供配置文件:

# mkdir /etc/php54

# mkdir /etc/php54/php.d

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

3、配置php-fpm

php-fpm提供Sysv init脚本文件,并将其添加至服务列表:

#cd php-5.4.19

# 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/php54/etc/php-fpm.conf.default /usr/local/php54/etc/php-fpm.conf

编辑php-fpm的配置文件:

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

配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行):

pm.max_children = 30 最多能启动多少个进程来响应用户请求的

pm.start_servers = 5 在启动时,启动几个空闲进程

pm.min_spare_servers = 2 最小空闲进程数

pm.max_spare_servers = 8 最大空闲进程数

pm.process_idle_timeout = 10s; 进程的空闲超时时间

pm.max_requests = 500 每一个子进程最多能够接受多少请求

pid = /usr/local/php54/var/run/php-fpm.pid

注意:刚开始启动的进程数不能小于最小的空闲进程数,还不能大于最大空闲进程数

接下来就可以启动php-fpm了:

# service php-fpm start

使用如下命令来验正(如果此命令输出有中几个php-fpm进程就说明启动成功了):

# ps aux | grep php-fpm

默认情况下,fpm监听在127.0.0.19000端口,也可以使用如下命令验正其是否已经监听在相应的套接字。

# netstat -tnlp | grep php-fpm

tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 689/php-fpm

配置httpd

1、启用httpd的相关模块

# vim /etc/httpd24/httpd.conf

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

# vim /etc/httpd24/extra/httpd-vhosts.conf

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

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.magedu.com

ProxyRequests Off

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/web/htdocs/pma/$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进行了封装,不需要手动指定。

将中心主机注释掉

#DocumentRoot "/web/htdocs"

找到vhosts

# Virtual hosts

Include /etc/httpd24/extra/httpd-vhosts.conf <------- 启用的选项



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

# vim /etc/httpd24/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 -t

启动服务

#service httpd24 start

# ss -tanl 查看80端口是否处于监听状态

访问我们前面所编辑的测试页面,/web/htdocs/pma/目录下的phptest.php

在浏览器中打开172.16.4.5/phptest.php

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





本文转自 宋鹏超 51CTO博客,原文链接:http://blog.51cto.com/qidian510/1282663,如需转载请自行联系原作者

上一篇:定制CentOS 6.3 自动安装盘


下一篇:常用CentOS vsftpd安装设置讲解