centos7上配置apache不一样域名多版本php共存

说一下原由,有台aliyun服务器,上一年刚用的时候使用lnmp一键安装包,选择安装了apache(2.4)、mysql(5.6)、php(5.6)。php

最近想升级php版本,由于旧版php(5.6)我还要继续用,直接升级的话确定有些代码不兼容(例如composer下载来使用的类库)想多版本Php能够一块儿使用,我装的是lamp,问题来了,只有lnmp能够多版本,因此发生下面的事情html

lnmp官网说明

因此目前状况是我要在apache配置多版本。上网努力地搜了一下,基本都是在nginx或者iis上配置多版本php,不符合个人需求。其实也找到一些在apache上配置多版本php的文章,按个人理解和操做没有一篇能完成的,多是我理解能力差或者技术菜吧。我是集合了多篇文章里的要点和折磨了一天慢慢理解出来,最后才完成apache上配置多版本php。技术上只是一个小学生,若是有错误的地方麻烦指出来,感激涕零。mysql

一、下载php7.3
由于下载很慢,使用kxsw瞬间搞掂
我是直接在 php官网 下载而后扔到服务器上的。nginx

image

固然也可使用命令sql

cd /
wget https://www.php.net/distributions/php-7.3.20.tar.gz

二、解压apache

tar -xzvf php-7.3.20.tar.gz

三、配置一些编译前的参数segmentfault

cd php-7.3.20
  
./configure '--prefix=/usr/local/php7.3' '--with-config-file-path=/usr/local/php7.3/etc' '--with-mysql=mysqlnd' '--with-mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--with-gd' '--with-iconv' '--with-zlib' '--enable-xml' '--enable-bcmath' '--enable-shmop' '--enable-sysvsem' '--enable-inline-optimization' '--enable-mbregex' '--enable-fpm' '--enable-mbstring' '--enable-ftp' '--enable-gd-native-ttf' '--with-openssl' '--enable-pcntl' '--enable-sockets' '--with-xmlrpc' '--enable-zip' '--enable-soap' '--with-pear' '--with-gettext' '--enable-session' '--with-mcrypt' '--with-curl' '--with-libzip=/usr/local/libzip-1.3.2' '--disable-fileinfo'

**--prefix=/usr/local/php7.3,等号后面的是你接下来安装的路径,按需填写。
--enable-fpm这个参数须要留意一下。是按照php-fpm方式安装。
对应的参数是--with-apxs2=/usr/local/apache/bin/apxs,等号前是使用模块的方式安装,等号后面是填写对应apache的路径。--enable-fpm和--with-apxs2=PATH模式,二者只能取其一,参数填写了--enable-fpm就不要--with-apxs2,后者直接安装在了apache中,会随着apache的启动而启动。**服务器

**提早说一下后面编译里出现了两个问题:
3.一、提示libzip版本过低,若是有这种问题出现,具体能够上网查。无非就是从新下载安装。重点就是要在上面内容里加上对应的参数,例如个人是libzip版本低就加上 --with-libzip=/usr/local/libzip-1.3.2
3.二、提示内存不足。我机器是2G。因此提早加上 --disable-fileinfo**session


四、编译和安装php7

make && make install

通常等个10来20分钟就完成了。视机器配置而定。

五、下载与编译安装mod_fcgid
安装Apache的mod_fcgid模块 mod_fcgid模块能够实现Apache下多版本php同时运行。能够自行上网找
我是会用的是2.3.9版本 压缩包格式是gz

cd /
tar -zxvf mod_fcgid-2.3.9.tar.gz
cd mod\_fcgid-2.3.9
APXS=/usr/local/apache/bin/apxs      ./configure.apxs
make
make install

安装好以后找到apache里的httpd.conf(lamp默认是/usr/local/apache/conf)文件
大概150行左右,就是LoadModule加载模块最后一行,添加

LoadModule fcgid_module modules/mod_fcgid.so

其实上面编译安装后就会自动添加了,不用动手操做,在此记录下来。

六、多域名多版本php配置(就是在这里卡了一下)
网上不少资料和文章都是在apache的httpd.conf添加相似如下的代码
,而后重启apache。重启后直接死掉,php没法解析

#加载fcgid扩展模块(额外说明,fcgid根据实际apache版本对应,apache2版本测试2.3.6正常) 
LoadModule fcgid\_module modules/mod\_fcgid.so 
#添加映射 
AddHandler fcgid-script .fcgi .php 
# 设置PHP\_FCGI\_MAX\_REQUESTS大于或等于FcgidMaxRequestsPerProcess,防止php-cgi进程在处理完全部请求前退出 
FcgidInitialEnv PHP\_FCGI\_MAX\_REQUESTS 1000 
#php-cgi每一个进程的最大请求数 
FcgidMaxRequestsPerProcess 1000 #php-cgi最大的进程数 
FcgidMaxProcesses 3 
#最大执行时间 
FcgidIOTimeout 120 
FcgidIdleTimeout 120 
#限制最大请求字节 (单位b) 
FcgidMaxRequestLen 2097152 
AddType application/x-httpd-php .php 
#------这里是默认虚拟主机配置 
#php.ini的存放目录 
FcgidInitialEnv PHPRC "D:/php5.4.4/" 
#php-cgi的路径 
FcgidWrapper "D:/php5.4.4/php-cgi.exe" .php

后来想到这里的配置是全部域名都调用的,换个法子。去到须要升级成7.3php版本的域名下(lamp默认是/usr/local/apache/conf/vhost)填写红框内的内容。
image

为了方便复制

#映射fcgi执行脚本
AddHandler fcgid-script .fcgi .php
#设置PHP_FCGI_MAX_REQUESTS大于或等于FcgidMaxRequestsPerProcess,防止php-cgi进程 在处理完全部请求前退出
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
#php-cgi每一个进程的最大请求数
FcgidMaxRequestsPerProcess 520
#最大执行时间
FcgidIOTimeout 300
#最大空闲时间
FcgidIdleTimeout 300
#限制最大请求字节
FcgidMaxRequestLen 2097152
#php程序最大文件上传限制50MB,默认只有2MB
MaxRequestLen 52428800
#php安装路径
FcgidInitialEnv PHPRC "/usr/local/php7.3/"
#php-cgi脚本执行路径
FcgidWrapper "/usr/local/php7.3/bin/php-cgi" .php


#这里要注意是填写在<Directory></Directory>里
Options FollowSymlinks ExecCGI

最后Options里的FollowSymlinks ExecCGI记得添加。不填写ExecCGI,php运行不了。FollowSymlinks不填写,一些项目里的直接进不去,就是打开链接报错,说目录没有权限访问。
最后重启apache就搞定了。能够在脚本输入phpinfo();打开链接访问就好了。
image
能够看到连接的.cn和.com是不一样域名但访问的是同一份文件。

有参考过的文章:
https://my.oschina.net/u/2366984/blog/809833
https://www.cnblogs.com/sky-view/p/5112888.html
https://my.oschina.net/u/2366984/blog/543148
https://blog.51cto.com/12529218/2313761
https://www.osyunwei.com/archives/10174.html

相关文章
相关标签/搜索