
1. 背景
Boss分配下来一个任务,在一台外网的服务器配置一个云服务。但在我们部署服务后发现,云服务运行在PHP7.1版的环境中会报致命的错误。原有的PHP运行了一个用户校验的接口,而服务器只有一台,O(∩_∩)O哈哈~,笔者抹把汗先。
于是乎,如何在同一台服务器上实现两个版本的PHP共存提上日程,参考网络上前辈的经验,一番折腾,搞定!
2. 实现原理分析
2.1 架构原理
– PHP有一种运行方式叫做fastCGI,他支持PHP分布式运算,
— FastCGI可以运行在Apach之外的服务器
— 或者说是动态内容(PHP代码)经过后端的fastCGI解析成html代码后再交给前端的Apache处理。
– 既然是分布式运算,那理论上可以部署多个fastCGI解析器
– 即可以部署多个fastCGI解析器,那么不同应用的PHP编码理论上可以发送给不同的fastCGI处理
2.2 实现前提
我们部署PHP经常会用到Remi’s的源,此源会编译PHP多个版本,最重要的他们选择不同的版本编译在不同的目录,即是不同的版本可以独立运行。
注:程序能够独立运行才有可能成功,如果你选择编译安装也要只有此问题。
3. 实践部分
3.1 基础安装
3.1.1 安装yum源
yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
注:更新的版本请从以下地址下载,
http://rpms.famillecollet.com/
3.1.2 关闭SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config setenforce 0
3.1.3 安装Apache的相关包
yum install -y httpd
3.1.4 启动http服务并配置自启动
systemctl start httpd systemctl enable httpd
3.1.5 配置防火墙
firewall-cmd --permanent --add-service http firewall-cmd --reload firewall-cmd --list-all
3.2 安装php 7.1的fastCGI
3.2.1 安装rpm包
yum install -y mod_fcgid php71-php-fpm php71-php
注:其他php71的相关安装包请根据实际情况选择,因与本主题无关,故被节删。
3.2.2 关闭Apache模块方式加载PHP
mv /etc/httpd/conf.d/php71-php.conf /etc/httpd/conf.d/php71-php.conf.default
3.2.3 确认fcgid配置文件存在
ls /etc/httpd/conf.d/fcgid.conf
3.2.4 确认服务名称
ls /usr/lib/systemd/system/php*fpm.service
3.2.5 检查配置
grep include /etc/opt/remi/php71/php-fpm.conf
确认存在以下行:
include=/etc/opt/remi/php71/php-fpm.d/*.conf
确认监听端口:
grep listen /etc/opt/remi/php71/php-fpm.d/www.conf
可见如下服务监听端口:
listen = 127.0.0.1:9000
3.2.6 启动服务并配置自启动
systemctl start php71-php-fpm.service systemctl enable php71-php-fpm.service
3.2.7 确认服务运行
netstat -antp | grep fpm
可见如下信息:
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 2598/php-fpm: maste
3.2.8 配置虚拟服务器
创建网站目录:
mkdir /var/www/www.cmdschool.org
创建测试代码:
echo '<?php phpinfo(); ?>' > /var/www/www.cmdschool.org/index.php
创建虚拟服务器配置:
vim /etc/httpd/conf.d/www.cmdschool.org.conf
加入如下配置:
<VirtualHost *:80> DocumentRoot /var/www/www.cmdschool.org ServerName www.cmdschool.org ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/www.cmdschool.org/$1 DirectoryIndex index.php </VirtualHost> <Directory /var/www/www.cmdschool.org> Options All AllowOverride all </Directory>
确认配置可用:
httpd -t
重启Apache服务是配置生效:
systemctl restart httpd
3.2.9 浏览器测试服务
http://www.cmdschool.org
注:要测试请现在客户端host配置名称解析
3.3 安装php 5.6的fastCGI
3.3.1 安装rpm包
yum install -y mod_fcgid php56-php-fpm php56-php
3.3.2 关闭Apache模块方式加载PHP
mv /etc/httpd/conf.d/php56-php.conf /etc/httpd/conf.d/php56-php.conf.default
3.3.3 确认fcgid配置文件存在
ls /etc/httpd/conf.d/fcgid.conf
3.3.4 确认服务名称
ls /usr/lib/systemd/system/php*fpm.service
3.3.5 检查并修改配置
grep include /etc/opt/remi/php56/php-fpm.conf
确认存在以下行:
include=/opt/remi/php56/root/etc/php-fpm.d/*.conf
修改监听端口:
vim /etc/opt/remi/php56/php-fpm.d/www.conf
修改参数如下:
listen = 127.0.0.1:9001
3.3.6 启动服务并配置自启动
systemctl start php56-php-fpm.service systemctl enable php56-php-fpm.service
3.3.7 确认服务运行
netstat -antp | grep fpm
可见如下信息:
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 2598/php-fpm: maste tcp 0 0 127.0.0.1:9001 0.0.0.0:* LISTEN 2818/php-fpm: maste
3.3.8 配置虚拟服务器
vim /etc/httpd/conf.d/demo.cmdschool.org.conf
创建虚拟服务器配置:
<VirtualHost *:80> DocumentRoot /var/www/demo.cmdschool.org ServerName demo.cmdschool.org ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9001/var/www/demo.cmdschool.org/$1 DirectoryIndex index.php </VirtualHost> <Directory /var/www/demo.cmdschool.org> Options All AllowOverride all </Directory>
创建网站目录:
mkdir /var/www/demo.cmdschool.org
创建测试代码:
echo '<?php phpinfo(); ?>' > /var/www/demo.cmdschool.org/index.php
确认配置可用:
httpd -t
重启Apache服务是配置生效:
systemctl restart httpd
3.3.9 浏览器测试服务
http://demo.cmdschool.org
注:要测试请现在客户端host配置名称解析
参阅文档:
==================================================
https://www.cnblogs.com/ningskyer/articles/5639276.html
没有评论