LAMP组合的编译安装:
httpd+php整合时有两种方式:
1.modules: 把php编译成httpd的DSO对象;
prefork: libphp5
event, worker: libphp5-zts(yum安装这个即可)
--enable-maintainer-zts (编译php时加这个选项支持event和worker模型)
2.fpm(fastcgi):php作为独立的服务
httpd对fastcgi协议的支持:
httpd-2.2: 需要额外安装fcgi模块;需要编译打补丁添加此模块
httpd-2.4: 自带fcgi模块;
安装次序:
httpd2.4, MariaDB5, php5
注意:httpd依赖于apr-1.4+, apr-util-1.4+, [apr-icon]
apr: apache portable runtime:相当于apache与系统之间的兼容层,实现让同一个httpd软件多平台运行,不用每个平台提供一种程序
centos6默认:apr-1.3.9, apr-util-1.3.9 ------->安装httpd2.4之前需要先安装apr-1.4+,
apr-util-1.4+,[apr-icon],否则不兼容,但是尽量不要覆盖原先的1.3版本,会破坏其他程序
对于centos6,安装前需要先安装开发包组
yum group install " Development tools" "Server Platform Development"
与httpd相关额包需要安装:yum install pcre-devel让应用程序支持正则表达式的扩展库
1.下载用到的包:
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
#3.tar xf httpd-2.4.9.tar.bz2 # cd httpd-2.4.9 # ./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
解释:
--enable-so:支持动态模块加载机制 --enable-rewrite:只是URL重写 --with-zlib:压缩算法库 --with-pcre:perl扩展程序包 --enable-mpms-shared:支持mpm共享模块机制 --with-mpm:默认使用哪种mpm
补充:
一,构建MPM为静态模块
在全部平台中,MPM都可以构建为静态模块。在构建时选择一种MPM,链接到服务器中。如果要改变MPM,必须重新构建。为了使用指定的MPM,请在执行configure脚本 时,使用参数 --with-mpm=NAME。NAME是指定的MPM名称。编译完成后,可以使用 ./httpd -l 来确定选择的MPM。 此命令会列出编译到服务器程序中的所有模块,包括 MPM。
二,构建 MPM 为动态模块
在Unix或类似平台中,MPM可以构建为动态模块,与其它动态模块一样在运行时加载。 构建 MPM 为动态模块允许通过修改LoadModule指令内容来改变MPM,而不用重新构建服务器程序。在执行configure脚本时,使用--enable-mpms-shared选项即可启用此特性。当给出的参数为all时,所有此平台支持的MPM模块都会被安装。还可以在参数中给出模块列表。默认MPM,可以自动选择或者在执行configure脚本时通过--with-mpm选项来指定,然后出现在生成的服务器配置文件中。编辑LoadModule指令内容可以选择不同的MPM。
2.编辑/etc/httpd24/httpd.conf,添加如下行即可:
PidFile "/var/run/httpd/httpd24.pid"这里应该与下面服务脚本指明的pid文件在同一位置
3.提供服务脚本:
cp /etc/rc.d/init.d/httpd /etc/rc.d/init.d/httpd24
编辑httpd24文件以下行
这里的pid位置应该与上面httpd.conf配置文件指明的pid文件在同一位置
chmod +x /etc/rc.d/init.d/httpd24
环境变量中导入编译安装的httpd二进制程序路径,并且记得使用hash -r清空hash缓存
vim /etc/profile.d/httpd.sh
. /etc/profile.d/httpd.sh
hash -r
开机启动:
chkconfig --add httpd24 && chkconfig httpd24 on
2.通用二进制安装mariadb:
#mkdir -pv /mydata/data 创建mariadb工作目录 # groupadd -r mysql # useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql# chown -R mysql:mysql /mydata/data tar -xf mariadb-5.5.43-linux-x86_64.tar.gz -C /usr/local/ cd /usr/local ln -sv mariadb-5.5.43-linux-x86_64/ mysql cd mysql chown -R root.mysql ./*scripts/mysql_install_db --datadir=/mydata/data/ --user=mysql cd /usr/local/mysql cp support-files/my-large.cnf /etc/mysql/my.cnf并编辑:
提供服务脚本:
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
开机启动
chkconfig --add mysqld && chkconfig mysqld on
这个mysql的客户端接口程序是/usr/local/mysql/bin/mysql,可以像上面那样修改PATH变量直接调用
3.编译安装php为模块
需要两个包:yum -y install bzip2-devel libmcrypt-devel libxml2-devel,注意libmcrypt-devel在epel源中,提供加解密库
# tar xf php-5.4.40.tar.bz2 # cd 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
make -j 2 && make install
--with-apxs2=/usr/local/apache/bin/apxs使httpd支持模块方式加载php(把php作为apache的模块)
这里为了支持apache的worker或event这两个MPM,编译时使用了--enable-maintainer-zts选项。
为php提供配置文件:
# cp php.ini-production /etc/php.ini
编辑apache配置文件httpd.conf,以apache支持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,或让其重新载入配置文件即可测试php是否已经可以正常使用。
重启后发现php模块已经加载
测试代码:编译安装的httpd默认页面在/usr/local/apache/htdocs目录下,创建index.php并测试
php正常,数据库连接正常
4.安装php-myadmin
用unzip解压phpMyadmin
mv phpMyAdmin-4.3.5-all-languages /usr/local/apache/htdocs/pma
cp config.sample.inc.php config.inc.php 编辑:
设置管理员密码:
重读授权表:
登录测试:
安装xcache:
# 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/
首先将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指令行,要确保此新增的行排在第一位。
注意最后一个xcache_size是为opcode保存开多大缓存空间,经常需要调整
重载httpd24服务
测试页刷新后出现了xcache:
安装xcache前压力测试:每秒处理10.73个请求
安装xcache之后,每秒62.43
配置apache-2.4.9以fpm方式的php-5.4.26
如果想让编译的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以模块方式安装的目录
tar xf php-5.4.26.tar.bz2
# cd php-5.4.26
# ./configure --prefix= /usr/local/php5 --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/php5 --with-config-file-scan-dir=/etc/php5.d --with-bz2
make && make install
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/php5/etc/php-fpm.conf.default /usr/local/php5/etc/php-fpm.conf
编辑php-fpm的配置文件:
# vim /usr/local/php5/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/php5/var/run/php-fpm.pid
接下来就可以启动php-fpm了:
# service php-fpm start
默认情况下,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的相关模块
在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.lee.com/admin/index.php /web/host1/admin/index.php fcgi://127.0.0.1:9000/web/host1/admin/index.php 例如:DocumentRoot "/www/lee.com" ServerName lee.com ServerAlias www.lee.com ProxyRequests Off ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/www/lee.com/$1 Options none AllowOverride none Require all granted
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实现。