共计 7524 个字符,预计需要花费 19 分钟才能阅读完成。
一、php 的工作模式
php 在 lamp 环境下共有三种工作模式:CGI 模式、apache 模块、FastCGI 模式。CGI 模式下运行 PHP,性能不是很好。作为 apache 的模块方式运行,在上一篇日志中编译安装 lamp 已经介绍。FastCGI 的方式和 apache 模块的不同点在于:FastCGI 方式 PHP 是一处独立的进程,所有 PHP 子进程都由 PHP 的一个叫作 php-fpm 的组件负责管理;而 apache 模块化方式运行的 PHP,则是 apache 负责调用 PHP 完成工作。PHP 的 FastCGI 方式性能要比 apache 模块化方式强很多,今天我们以 FastCGI 方式编译安装 lamp。
推荐阅读 :
Ubuntu 13.04 安装 LAMP\Vsftpd\Webmin\phpMyAdmin 服务及设置 http://www.linuxidc.com/Linux/2013-06/86250.htm
CentOS 5.9 下编译安装 LAMP(Apache 2.2.44+MySQL 5.6.10+PHP 5.4.12) http://www.linuxidc.com/Linux/2013-03/80333p3.htm
RedHat 5.4 下 Web 服务器架构之源码构建 LAMP 环境及应用 PHPWind http://www.linuxidc.com/Linux/2012-10/72484p2.htm
LAMP 源码环境搭建 WEB 服务器 Linux+Apache+MySQL+PHP http://www.linuxidc.com/Linux/2013-05/84882.htm
二、编译环境及各软件版本
以下为本次编译环境及各软件版本:
linux | web 服务器 | php | mysql | xcache |
CentOS 6.4 | httpd-2.4.9 | php-5.4.26 | mysql-5.5.33-linux2.6-x86_64 | xcache-3.0.3 |
xcache 是一款 PHP 的加速器,用于提高 PHP 的执行效率。
三、编译安装 LAMP
1、编译安装 apache(请参考上一篇文章)
2、编译安装 mysql(请参考上一篇文章)
3、FastCGI 方式安装 php
(1)、解决依赖关系
请配置好 yum 源后执行如下命令:
# yum -y groupinstall “Desktop Platform Development”
# yum -y install bzip2-devel libmcrypt-devel
# yum -y groupinstall “X Software Development”
如果想让编译的 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
(2)、编译安装 php-5.4.26
# 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
–enable-fpm:开启 php-fpm 组件用于管理 PHP
# make
# make intall
(4)、为 php 提供配置文件,配置文件在软件解压后的目录内:
cp php.ini-production /etc/php.ini
(5)、配置 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
(6)、为 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
(7)、接下来就可以启动 php-fpm 了:
# service php-fpm start
使用如下命令来验正(如果此命令输出有中几个 php-fpm 进程就说明启动成功了):
# ps aux | grep php-fpm
默认情况下,fpm 监听在 127.0.0.1 的 9000 端口,也可以使用如下命令验正其是否已经监听在相应的套接字:
# netstat -tnlp | grep php-fpm
(8)、启用 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
(9)、配置虚拟主机支持使用 fcgi,在相应的虚拟主机中添加类似如下两行。
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1
ProxyRequests Off:关闭正向代理
ProxyPassMatch:把以.php 结尾的文件请求发送到 php-fpm 进程,php-fpm 至少需要知道运行的目录和 URI,所以这里直接在 fcgi://127.0.0.1:9000 后指明了这两个参数,其它的参数的传递已经被 mod_proxy_fcgi.so 进行了封装,不需要手动指定。
例如,你在地址栏上输入的地址为,http://www.linuxidc.com/blog/admin/index.php,其实它是指向了另一个地址,fcgi://127.0.0.1:9000/blog/admin/index.php。
(10)、编辑 apache 配置文件 httpd.conf,让 apache 能识别 php 格式的页面,并支持 php 格式的主页。
添加如下二行:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
定位至 DirectoryIndex index.html 修改为:
DirectoryIndex index.php index.html
4、编译安装 xcache
(1)、解压软件包
# tar xf xcache-3.0.3.tar.gz
# cd xcache-3.0.3
(2)、执行 phpize,给 PHP 编译一个新的模块
# /usr/local/php/bin/phpize
(3)、编译安装
# ./configure –enable-xcache –with-php-config=/usr/local/php/bin/php-config
# make && make install
注意:编译完成后,会有一个类似于下图所示的路径,请把此路径复制保存,配置文件里要用到此项:
/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/
(4)、将 xcache 提供的样例配置导入 php.ini,xcache.ini 文件在 xcache 的源码目录中:
# mkdir /etc/php.d
# cp xcache.ini /etc/php.d
(5)、接下来编辑 /etc/php.d/xcache.ini,找到 extension 开头的行,修改为如下行,使用刚才复制的路径:
extension = /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xcache.so
注意:如果 php.ini 文件中有多条 extension 指令行,要确保此新增的行排在第一位。
(6)、新增虚拟主机测试:
<VirtualHost *:80>
ServerAdmin admin@linuxidc.com
DocumentRoot “/var/www/html/linuxidc.com”
ServerName www.linuxidc.com
ServerAlias www.linuxidc.com
ErrorLog “logs/linuxidc.com.error_log”
CustomLog “logs/linuxidc.com.access_log” common
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/linuxidc.com/$1
</VirtualHost>
四、环境测试
lamp 的安装已经完成了,我们弄个网站测试一下吧!
(1)、编辑虚拟主机:
(2)、新建 joomla 网站数据库及用户
(3)、安装网站程序
(4)、使用 httpd 自带的性能测试工具 ab,测试一下服务器性能,参数和上次一样:
ab -c 5 -n 50 http://www.linuxidc.com /index.php
上次是 2,这次是 9,性能翻了 4 倍多,性能很强,有木有!!
一、php 的工作模式
php 在 lamp 环境下共有三种工作模式:CGI 模式、apache 模块、FastCGI 模式。CGI 模式下运行 PHP,性能不是很好。作为 apache 的模块方式运行,在上一篇日志中编译安装 lamp 已经介绍。FastCGI 的方式和 apache 模块的不同点在于:FastCGI 方式 PHP 是一处独立的进程,所有 PHP 子进程都由 PHP 的一个叫作 php-fpm 的组件负责管理;而 apache 模块化方式运行的 PHP,则是 apache 负责调用 PHP 完成工作。PHP 的 FastCGI 方式性能要比 apache 模块化方式强很多,今天我们以 FastCGI 方式编译安装 lamp。
推荐阅读 :
Ubuntu 13.04 安装 LAMP\Vsftpd\Webmin\phpMyAdmin 服务及设置 http://www.linuxidc.com/Linux/2013-06/86250.htm
CentOS 5.9 下编译安装 LAMP(Apache 2.2.44+MySQL 5.6.10+PHP 5.4.12) http://www.linuxidc.com/Linux/2013-03/80333p3.htm
RedHat 5.4 下 Web 服务器架构之源码构建 LAMP 环境及应用 PHPWind http://www.linuxidc.com/Linux/2012-10/72484p2.htm
LAMP 源码环境搭建 WEB 服务器 Linux+Apache+MySQL+PHP http://www.linuxidc.com/Linux/2013-05/84882.htm
二、编译环境及各软件版本
以下为本次编译环境及各软件版本:
linux | web 服务器 | php | mysql | xcache |
CentOS 6.4 | httpd-2.4.9 | php-5.4.26 | mysql-5.5.33-linux2.6-x86_64 | xcache-3.0.3 |
xcache 是一款 PHP 的加速器,用于提高 PHP 的执行效率。
三、编译安装 LAMP
1、编译安装 apache(请参考上一篇文章)
2、编译安装 mysql(请参考上一篇文章)
3、FastCGI 方式安装 php
(1)、解决依赖关系
请配置好 yum 源后执行如下命令:
# yum -y groupinstall “Desktop Platform Development”
# yum -y install bzip2-devel libmcrypt-devel
# yum -y groupinstall “X Software Development”
如果想让编译的 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
(2)、编译安装 php-5.4.26
# 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
–enable-fpm:开启 php-fpm 组件用于管理 PHP
# make
# make intall
(4)、为 php 提供配置文件,配置文件在软件解压后的目录内:
cp php.ini-production /etc/php.ini
(5)、配置 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
(6)、为 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
(7)、接下来就可以启动 php-fpm 了:
# service php-fpm start
使用如下命令来验正(如果此命令输出有中几个 php-fpm 进程就说明启动成功了):
# ps aux | grep php-fpm
默认情况下,fpm 监听在 127.0.0.1 的 9000 端口,也可以使用如下命令验正其是否已经监听在相应的套接字:
# netstat -tnlp | grep php-fpm
(8)、启用 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
(9)、配置虚拟主机支持使用 fcgi,在相应的虚拟主机中添加类似如下两行。
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1
ProxyRequests Off:关闭正向代理
ProxyPassMatch:把以.php 结尾的文件请求发送到 php-fpm 进程,php-fpm 至少需要知道运行的目录和 URI,所以这里直接在 fcgi://127.0.0.1:9000 后指明了这两个参数,其它的参数的传递已经被 mod_proxy_fcgi.so 进行了封装,不需要手动指定。
例如,你在地址栏上输入的地址为,http://www.linuxidc.com/blog/admin/index.php,其实它是指向了另一个地址,fcgi://127.0.0.1:9000/blog/admin/index.php。
(10)、编辑 apache 配置文件 httpd.conf,让 apache 能识别 php 格式的页面,并支持 php 格式的主页。
添加如下二行:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
定位至 DirectoryIndex index.html 修改为:
DirectoryIndex index.php index.html