前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apache多虚拟主机多版本PHP(5.3+5.6+N)共存运行配置全过程

Apache多虚拟主机多版本PHP(5.3+5.6+N)共存运行配置全过程

作者头像
96php.cn
发布2018-04-28 15:13:18
2.1K0
发布2018-04-28 15:13:18
举报
文章被收录于专栏:www.96php.cnwww.96php.cn

常规的PHP配置方式有很多种,例如CGI、fast-cgi、apache module handle、cli、isapi这些。

  • CGI (通用网关接口 / Common Gateway Interface)
  • Fast CGI (常驻型CGI / Long-Live CGI)
  • CLI (命令行运行 / Command Line Interface)
  • Module handle (Apache等Web服务器运行的模式,php5_module)
  • ISAPI (专门用于IIS 上面加载PHP dll的一种方式 Internet Server Application Program Interface)

由于各种配置方式的不同,会表现出各自不同的优劣。经常在web开发上用到的也就是FastCGI和Module handle这种模块加载的方式,还有一些其他的配置方式细节本文不再提及,请在文末寻找相关文章进行查阅。

为需要实现在同一台Linux服务器上面,同时运行多个不同版本的PHP程序,本文我们将使用FastCGI方式加载,并把过程详细记录下来方便大家参考

准备

Centos7.1(其他版本大同小异)、mod_fcgid2.3.6、httpd-2.2.31

注:本文涉及的工具包软件都会在文末提供。

安装服务基础组件

  1. 安装编译相关依赖
代码语言:javascript
复制
yum install httpd-devel apr apr-devel libtoo

2.pr:

代码语言:javascript
复制
tar xf apr-1.5.2.tar.bz2
cd apr-1.5.2
./configure --prefix=/usr/local/apr
make && make install

3.apr-util:

代码语言:javascript
复制
tar xf apr-util-1.5.4.tar.bz2
cd apr-util-1.5.4
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/ --with-apr=/usr/local/apr/
make && make install

4.安装pcre-devel

代码语言:javascript
复制
yum -y install pcre-devel
代码语言:javascript
复制
checking for pcre-config... false
configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/   
 ——解决httpd编译过程中出现的错误,没有安装的需要预先安装。

5.安装SSL

代码语言:javascript
复制
yum install openssl-devel
yum update openssl
代码语言:javascript
复制
checking whether to enable mod_ssl... configure: error: mod_ssl has been requested but can not be built due to prerequisite failures 
 ——解决httpd编译过程中出现的错误,没有安装的需要预先安装。

编译安装httpd

代码语言:javascript
复制
 ./configure --prefix=/usr/local/apache \
 --sysconfdir=/etctpd \
--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=all \
--enable-mpms-shared=all \
--with-mpm=event

make && make install

编译安装mod_fcgid.so-2.3.6

代码语言:javascript
复制
[root@localhost mod_fcgid-2.3.6]# APXS=/usr/local/apache/bin/apxs ./configure.apxs
[root@localhost mod_fcgid-2.3.6]# make && make install

APXS="赋值的路径为你的httpd目录下apxs文件位置"

编译安装完成之后会自动将其编入httpd目录下的modules里面

在这里需要说明下,使用apxs -i -a -c mod_fcgid.so 去安装的话会出现一些问题,导致httpd加载conf的时候终止进行。

使用mod_fcgid高于2.3.6版本以上,如2.3.9(官网提供的版本)经测试,在httpd2.4.23、httpd2.2.31都会出现一个未定义符号错误,内容如下:

代码语言:javascript
复制
undefined symbol: set_access_info
代码语言:javascript
复制
另外错误说明:

[root@localhost mod_fcgid-2.3.6]# make && make install
Makefile:29: /rules.mk: No such file or directory
make: *** No rule to make target `/rules.mk'.  Stop.

出现类似错误,最快捷的是删除当前文件夹,重新解压mod_fcgid或者httpd 后进行编译

配置虚拟主机

  1. 配置主httpd.conf
代码语言:javascript
复制
 vi /etctpdtpd.conf
#在DSO下增加以下内容
LoadModule fcgid_module modules/mod_fcgid.so
#在文件尾部增加
Include "vhost/*.conf"

如:

代码语言:javascript
复制
#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#
LoadModule fcgid_module modules/mod_fcgid.so

<IfModule !mpm_netware_module>
<IfModule !mpm_winnt_module>

... 省略内容 ....
NameVirtualHost *:80
Include "vhost/*.conf"

2.配置虚拟主机conf

创建虚拟主机配置目录

代码语言:javascript
复制
 mkdir /usr/local/apachehost/
vi /usr/local/apachehost/default.conf
vi /usr/local/apachehost/php534.conf

vhost/default.conf

代码语言:javascript
复制
<VirtualHost *:80>
    ServerName default
    DocumentRoot "/mnt/web/default/wwwroot"
    ServerAlias php5629.hk.explame.com
    ErrorLog "/mnt/web/default/log/error.log"
    CustomLog "/mnt/web/default/log/access.log" common
    FcgidInitialEnv PHPRC "/usr/local/php/php5.6.29/"
    FcgidWrapper "/usr/local/php/php5.6.29/bin/php-cgi" .php
</VirtualHost>

vhost/php534.conf

代码语言:javascript
复制
<VirtualHost *:80>
    ServerName php534
    DocumentRoot "/mnt/web/php534/wwwroot"
    ServerAlias php534.hk.explame.com
    ErrorLog "/mnt/web/php534/log/error.log"
    CustomLog "/mnt/web/php534/log/access.log" common
    FcgidInitialEnv PHPRC "/usr/local/php/php5.3.4/"
    FcgidWrapper "/usr/local/php/php5.3.4/bin/php-cgi" .php
</VirtualHost>

编译安装PHP

1.准备依赖

代码语言:javascript
复制
# c和c++编译器
yum install -y gcc gcc-c++
# PHP扩展依赖
yum install -y libxml2-devel openssl-devel libcurl-devel libjpeg-devel libpng-devel libicu-devel openldap-devel
  1. 安装PHP5.5.9
代码语言:javascript
复制
 wget -O php-5.6.29.tar.bz2 http://cn2.php.net/get/php-5.6.29.tar.bz2/from/this/mirror
tar -xvjf php-5.6.29.tar.bz2
cd php-5.6.29
./configure --prefix=/usr/local/php/php5.6.29/\
 --with-libdir=lib64\
 --enable-fpm\
 --with-fpm-user=php-fpm\
 --with-fpm-group=www\
 --enable-mysqlnd\
 --with-mysql=mysqlnd\
 --with-mysqli=mysqlnd\
 --with-pdo-mysql=mysqlnd\
 --enable-opcache\
 --enable-pcntl\
 --enable-mbstring\
 --enable-soap\
 --enable-zip\
 --enable-calendar\
 --enable-bcmath\
 --enable-exif\
 --enable-ftp\
 --enable-intl\
 --with-openssl\
 --with-zlib\
 --with-curl\
 --with-gd\
 --with-zlib-dir=/usrb\
 --with-png-dir=/usrb\
 --with-jpeg-dir=/usrb\
 --with-gettext\
 --with-mhash\
 --with-ldap

make && make install

2.安装PHP5.3.3

代码语言:javascript
复制
wget http://museum.php.net/php5/php-5.3.4.tar.bz2
tar -xvjf php-5.3.4.tar.bz2cd php-5.3.4#php5.3 额外安装yum -y install libevent libevent-dev libevent-devel
./configure \
--prefix=/usr/local/php/php5.3.4/  \--with-openssl  \--enable-mbstring \--with-freetype-dir \--with-jpeg-dir \--with-png-dir \--with-zlib \--with-libxml-dir \--enable-xmlmake && make install

其他版本配置及编译方式类同,至少安装完2个PHP版本进行配置多虚拟主机多PHP版本配置。

PHP低版本在安装的过程中会遇到很多问题,本文忽略掉一些常见的,请查阅网络解决。

测试结果

php5.6.29

1.png
1.png

加载默认的phpinfo,平均速度在1s左右

184212_fiKX_2366984.png
184212_fiKX_2366984.png

输出普通字符,平均速度在95ms左右。

php5.3.4

183953_5Dlc_2366984.png
183953_5Dlc_2366984.png

加载默认的phpinfo,平均速度在500ms左右,相对5.6快了一倍。

184357_m2UX_2366984.png
184357_m2UX_2366984.png

输出普通字符,平均速度在100ms左右。

PHP5.6在此过程中加载了比PHP5.3更多的模块,而在速度上面整体来说还是提升了不少,实际项目测试,请自行研究。

经实测最终可用的版本为

Centos7.1 + mod_fcgid-2.3.6 + httpd-2.2.31 + PHP*

本文为实测内容,非权威发布,如有疑问,请在文末下方留言。谢谢!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年12月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 准备
  • Centos7.1(其他版本大同小异)、mod_fcgid2.3.6、httpd-2.2.31
    • 安装服务基础组件
      • 编译安装httpd
      • 配置虚拟主机
      • 测试结果
        • php5.6.29
          • php5.3.4
          相关产品与服务
          轻量应用服务器
          轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门开源软件打包实现一键构建应用,提供极简上云体验。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档