首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Apache多虚拟主机多版本PHP(5.3+5.6+N)共存运行配置全过程

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

作者头像
96php.cn
发布于 2018-04-28 07:13:18
发布于 2018-04-28 07:13:18
2.3K01
代码可运行
举报
文章被收录于专栏:www.96php.cnwww.96php.cn
运行总次数:1
代码可运行

常规的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
代码运行次数:0
运行
AI代码解释
复制
yum install httpd-devel apr apr-devel libtoo

2.pr:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
yum -y install pcre-devel
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
yum install openssl-devel
yum update openssl
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
 ./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
代码运行次数:0
运行
AI代码解释
复制
[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
代码运行次数:0
运行
AI代码解释
复制
undefined symbol: set_access_info
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
另外错误说明:

[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
代码运行次数:0
运行
AI代码解释
复制
 vi /etctpdtpd.conf
#在DSO下增加以下内容
LoadModule fcgid_module modules/mod_fcgid.so
#在文件尾部增加
Include "vhost/*.conf"

如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#
# 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
代码运行次数:0
运行
AI代码解释
复制
 mkdir /usr/local/apachehost/
vi /usr/local/apachehost/default.conf
vi /usr/local/apachehost/php534.conf

vhost/default.conf

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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
代码运行次数:0
运行
AI代码解释
复制
<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
代码运行次数:0
运行
AI代码解释
复制
# 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
代码运行次数:0
运行
AI代码解释
复制
 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
代码运行次数:0
运行
AI代码解释
复制
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

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

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

php5.3.4

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

输出普通字符,平均速度在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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
python打包exe的方法
目前网上能获取的免费的Python打包工具主要有三种:py2exe、PyInstaller和cx_Freeze。其中PyInstaller最新版只支持Python2.7,py2exe计划开发支持python3.x版本,但是目前还没有完成。只有cx_Freeze支持python3.X版本,也支持python2.X版本。个人也觉得cxfreeze比较简单,不容易出错。
py3study
2020/01/08
2.2K0
python打包exe的方法
目前网上能获取的免费的Python打包工具主要有三种:py2exe、PyInstaller和cx_Freeze。其中PyInstaller最新版只支持Python2.7,py2exe计划开发支持python3.x版本,但是目前还没有完成。只有cx_Freeze支持python3.X版本,也支持python2.X版本。个人也觉得cxfreeze比较简单,不容易出错。
全栈程序员站长
2022/07/23
1K0
python打包exe的方法
6种打包Python代码的方法,让你的程序变成exe应用
Python是一种高级编程语言,它具有易学易用、跨平台等优点,因此在开发中得到了广泛的应用。
matinal
2023/10/13
19.5K0
将打飞机游戏打包成 exe
发现很多朋友在写了 pygame 的打飞机游戏之后,都很想打包成 exe 文件分享给别人玩。但是在打包的过程中,可能遇到一些问题。今天我就来整理一下 pygame 打包 exe 的一些注意事项。 另外,pygame 打飞机游戏的相关资源,包括图片和代码,我放在了论坛的帖子里,需要的朋友可去下载。 在这里,我介绍两种较为常见的打包 exe 工具,cx_freeze 和 py2exe。先说 cx_freeze: cx_freeze 打包的过程比较简单,安装好之后运行一条命令就可以了。基本步骤就是: 1.搜索并下
Crossin先生
2018/04/17
1.6K0
python3.x使用cxfreeze将.p打包成.exe
之前写了一个使用ffplay批量查看格式为h264的图片,每次抽帧后都要打开pycharm编译器来运行程序,然后才能正常查看图片,或者在其他没有安装python环境的电脑中运行,很不方便。为此,在网上找了些方法,发现也是说的一知半解的。因此,自己通过实践记录python3.x下怎么样把.py文件打包成.exe可执行文件,这样就可以直接修改文件内的图片个数就可以双击.exe程序来查看图片了。
用户6367961
2019/09/30
1.2K0
python3.x使用cxfreeze将.p打包成.exe
【Python实战】5种方法将Python代码打包成EXE可执行文件
作为一名Python开发者,我们经常需要将写好的脚本分享给他人使用。但对方可能没有安装Python环境,这时候就需要将.py文件打包成.exe可执行文件。常见的应用场景包括:
码农编程进阶笔记
2025/05/17
7.2K0
【Python实战】5种方法将Python代码打包成EXE可执行文件
python基础--将python的py文件打包成exe程序
在我们完成一个Python项目或一个程序时,希望将Python的py文件打包成在Windows系统下直接可以运行的exe程序。在浏览网上的资料来看,有利用pyinstaller和cx_Freeze进行打包的方法。关于cx_Freeze打包的方法,可以参考wangdamozhizhou博客windows下cx_Freeze生成Python可执行程序中的方法。由于方法主要是可以用于Python3.3版本的,高于该版本的Python无法使用。在我尝试的过程中,碰到的一个问题是:
我被狗咬了
2019/09/23
1.6K0
python基础--将python的py文件打包成exe程序
Python源文件打包成可执行的exe应用,给你的代码变个身!
我们平常所写的程序一般都是在编译环境下运行的,然而这对于那些没有开发环境或者对程序一无所知的小白就很不友好了,
灰小猿
2020/09/23
2K0
Python源文件打包成可执行的exe应用,给你的代码变个身!
把python脚本编译成exe
最近更新时间2013-09-28 官网:http://www.pyinstaller.org/ github: https://github.com/pyinstaller/pyinstaller
老高的技术博客
2022/12/27
6610
手把手教你基于Python实现打包成exe程序
将Python程序打包成exe(可执行文件)的主要原因是为了便于分发和使用,同时保护代码和提升用户体验。。这个过程有几个关键优点:
手撕代码八百里
2024/01/04
6.1K0
wxPython_06_将Python源代码打包成exe可执行文件
python的源代码要在没有安装/配置Python相关开发环境的电脑上运行,那么就需要使用工具对源代码进行打包,在windows上运行则必须打包成exe可执行文件,现在常用的打包工具有:
码农帮派
2020/04/01
1.9K0
wxPython_06_将Python源代码打包成exe可执行文件
rpa文件解包_py封装exe
注意:当前环境是Play_Craw, pip install cx-freeze 时自然安装到了C:\Users\xiaosalang\Anaconda3\envs\Play_Craw\Scripts处
全栈程序员站长
2022/08/02
2.5K0
rpa文件解包_py封装exe
Python3 打包exe
以前只用 cx_Freeze 支持将 python3 打包成 exe ,示例如下:
机器学习和大数据挖掘
2019/07/01
1.3K0
cxfreeze打包python,飞一
于我来说,写一些小型程序,在不需要考虑太多问题的时候,python无疑是我的第一选择。而有的时候,虽然是小型程序,但我还是需要他们通用,即使不考虑使他跨平台,但最起码要可以跨电脑吧,不然我去到别的电脑还需要安装python运行环境,在那里运行完后,还得帮别人删除,岂不是太过麻烦,所以,无论是给别人使用,还是自己需要在无python环境的电脑中使用,我们有时需要把python的脚本程序打包成exe。
py3study
2020/01/02
7050
【教程】Nuitka | Python打包exe新工具
pyinstaller使用最方便,但exe实在太大了,一个tkinter窗口程序打包为200MB,因此转向Nuitka。
小锋学长生活大爆炸
2025/06/16
7990
关于Python病毒样本的分析方法
近年来,Python语言凭借其入门简单、功能强大和开发效率高等特性逐渐成为最受欢迎的开发语言,与此同时,Python在安全领域的应用也渐趋广泛,开始被用在黑客和渗透测试的各个领域。
字节脉搏实验室
2021/01/07
2K0
关于Python病毒样本的分析方法
你需要的Python打包exe指南来了
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller
吾非同
2021/05/07
3K0
pyinstaller打包python项目
在日常工作中,基本都是直接执行python脚本,但最近有个项目,需要提供给外部使用,而使用者又完全没有编程基础,不太可能自己安装python,安装各种依赖,所以将python项目打包为exe程序就显得尤为必要。
法号戒糖
2024/03/20
9300
Python打包发布神器—Pyinsta
在windows平台学习python的过程中,你肯定会遇到需要把.py脚本打包成.exe的情形,如此,至少有两方面的好处:第一,你的代码保密性更好,其他人不能直接看到python代码;第二,打包后的exe程序无需再安装相应的模块即可直接使用;其中,第二条是我们做打包工作的主要考虑,方便工具的分发和使用。
py3study
2020/01/06
3.5K0
Python项目打包成可执行文件的完整指南
Python是一种广泛使用的编程语言,适合快速开发和原型设计。然而,Python代码通常是以脚本形式分发的,需要目标系统上预先安装Python解释器。这对于非技术用户来说可能不太方便,因此,将Python项目打包为独立的可执行文件(exe)是一个常见的需求。本文将介绍如何将Python项目打包为可执行文件,涵盖基本概念、常用打包工具、详细步骤和注意事项。
Front_Yue
2024/08/30
2.9K0
Python项目打包成可执行文件的完整指南
相关推荐
python打包exe的方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验