站长论坛

作者: stevenchen
查看: 799|回复: 10

more +随机图赏Gallery

ptcms4.2.8自动采集配置教程ptcms4.2.8自动采集配置教程
用宝塔面板搭建环境的云服务器、微擎系统同一个域名同一个站点(单域名)配置多版本p...用宝塔面板搭建环境的云服务器、微擎系统同一个域名同一个站点(单域名)配置多版本p...
每日星座卡片 zunyue_constellation 1.0.5 全开源版每日星座卡片 zunyue_constellation 1.0.5 全开源版
人人商城小程序直播系统如何设置第三方推流设备直播?人人商城小程序直播系统如何设置第三方推流设备直播?
无需借助其他软件或者插件实现Chrome网页长截图无需借助其他软件或者插件实现Chrome网页长截图
招商融资!纯净水桶广告,水桶广告,水媒体广告,饮用水广告,水媒体!招商融资!纯净水桶广告,水桶广告,水媒体广告,饮用水广告,水媒体!
查看: 799|回复: 10

用宝塔面板搭建环境的云服务器、微擎系统同一个域名同一个站点(单域名)配置多版本p...

[复制链接]
stevenchen 发表于 2020-8-20 18:49:27 | 显示全部楼层 |阅读模式
查看: 799|回复: 10
同一个域名同一个站点(单域名)配置多版本php的需求来源于微擎,微擎应用市场中的应用开发者所采用的php版本较多,低到php5.4高至php7.4横跨多个版本,正所谓众口难调。而微擎玩家又不可能只购买一个应用,这就需要多版本php共存。这篇文章以用宝塔面板搭建环境的云服务器为例,讲解微擎系统同一个域名同一个站点(单域名)配置多版本php的原理及教程。



同一个域名同一个站点(单域名)配置多版本php场景呈现
用centos系统的阿里云服务器ECS安装了宝塔面板搭建环境,部署的微擎站点域名:www.abc.com,同时购买了应用A和应用B,应用A要求运行php5.6版本,应用B要求运行php7.1版本,这就要求通过www.abc.com时,根据访问的是应用A还是应用B,自动切换PHP版本,保证一个域名可以同时使用AB两个应用。

同一个域名同一个站点(单域名)配置多版本php解决方案
说到同一个域名同一个站点(单域名)配置多版本php的解决方案,值得一提的是大家委屈求全的解决方案 ———— 多站点多域名解决方案。

多站点多域名解决方案是什么呢?以宝塔面板为例,可新建一个站点绑定其他域名,将站点目录指向微擎的站点目录,不需要新建数据库,指定PHP为微擎应用需要的版本,用其它域名访问微擎。这么做的优缺点也很明显。

优点:简单高效,容易上手。

缺点:现在能想到的有以下几点:

1、微擎是按照域名授权的,新建的站点绑定了其他域名(不是微擎的授权域名),如果需要更新或升级微擎及应用,就需要用授权域名登陆,然后更新升级。

2、需重新解析一个新的域名,如果是小程序还得再次申请配置https协议。

3、无法通过一个域名访问微擎,应用A用A域名访问,应用B用B域名访问。

4、拥有多个不同PHP版本的应用时,新建的站点太多,给运维造成不小的负担,比如流量异常时,排查是哪个域名的问题都比较困难。

为了规避上面的缺点,我们才来尝试同一个域名同一个站点(单域名)配置多版本php,找到这个解决方案后,微擎是收费300RMB处理,看到这篇文章的兄弟有福了。

同一个域名同一个站点(单域名)配置多版本php的实现原理
以下原理分析是以宝塔面板为例,并且运行环境中已经安装了多个版本的PHP,凡是用宝塔面板搭建的云服务器环境,nginx和PHP的安装目录均在/www/server/下。nginx配置文件nginx.conf在/www/server/nginx/conf/下。各个站点(网站)的配置文件在/www/server/panel/vhost/nginx/目录下。拿其中一个站点(网站)的配置文件来说,其内容如下:
  1. server
  2. {
  3. listen 8081;
  4. server_name www.abc.com;
  5. index index.php index.html index.htm default.php default.htm default.html;
  6. root /www/wwwroot/www.abc.com;
  7. #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
  8. #error_page 404/404.html;
  9. #SSL-END
  10. #ERROR-PAGE-START 错误页配置,可以注释、删除或修改
  11. #error_page 404 /404.html;
  12. #error_page 502 /502.html;
  13. #ERROR-PAGE-END
  14. #PHP-INFO-START PHP引用配置,可以注释或修改
  15. include enable-php-56.conf;
  16. #PHP-INFO-END
  17. #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
  18. include /www/server/panel/vhost/rewrite/www.abc.com.conf;
  19. #REWRITE-END
  20. #禁止访问的文件或目录
  21. location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
  22. {
  23. return 404;
  24. }
  25. #一键申请SSL证书验证目录相关设置
  26. location ~ \.well-known{
  27. allow all;
  28. }
  29. location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
  30. {
  31. expires 30d;
  32. error_log off;
  33. access_log /dev/null;
  34. }
  35. location ~ .*\.(js|css)?$
  36. {
  37. expires 12h;
  38. error_log off;
  39. access_log /dev/null;
  40. }
  41. access_log /www/wwwlogs/www.abc.com.log;
  42. error_log /www/wwwlogs/www.abc.com.error.log;
  43. }
复制代码
上面文件中的内容重点关注 include enable-php-56.conf; 这一项。找到enable-php-56.conf 配置文件并打开(该文件的路径在/www/server/nginx/conf/enable-php-56.conf),看到如下内容:
  1. location ~ [^/]\.php(/|$)
  2. {
  3. try_files $uri =404;
  4. fastcgi_pass unix:/tmp/php-cgi-56.sock;
  5. fastcgi_index index.php;
  6. include fastcgi.conf;
  7. include pathinfo.conf;
  8. }
复制代码
看到这里,我们大致了解了nginx和php之间的交互过程:当客户发起一个http时,nginx将请求路由到网站根目录下的index.php—->加载nginx的fastcgi模块—->请求到达/tmp/php-cgi-56.sock—->php-fpm监听/tmp/php-cgi-56.sock—->php-fpm接收到请求,启用worker进程处理请求—->php-fpm处理完请求,返回给nginx—->nginx将结果通过http返回给浏览器。上面location块里面的fastcgi_pass配置项就是指定不同php版本的地方。由此可见宝塔官方对不同的PHP版本进行了封装,统一放到了/www/server/nginx/conf 目录,该目录下有多个enable-php-56.conf 这样的文件。因此,我们想要同一个域名同一个站点指定不同的php版本,关键就是在站点(网站)配置指定 fastcgi_pass unix:/tmp/php-cgi-56.sock; 。对于微擎而言,每个应用都有不同的名称,也就是微擎所指的 “应用标识” 。根据微擎URL中的应用标识来判断需要使用的PHP版本,所有问题便可迎刃而解。

同一个域名同一个站点(单域名)配置多版本php的教程
宝塔面板的站点配置文件中,PHP应用配置一般从第33行开始,把站点配置文件中的 include enable-php-56.conf; 替换成下面的代码:
  1. location ~ [^/]\.php(/|$) {
  2. if ($request_uri ~* "yb_shopv2_video"){
  3. fastcgi_pass unix:/tmp/php-cgi-71.sock;
  4. }
  5. fastcgi_pass unix:/tmp/php-cgi-56.sock;
  6. fastcgi_index index.php;
  7. include fastcgi.conf;
  8. include pathinfo.conf;
  9. }
复制代码
替换完成后,再按照下面的说明稍作调整三处调整:

1、然后把下面代码中的 yb_shopv2_video 换成你要调整PHP版本的微擎应用标识;

2、把 php-cgi-71.sock; 中的71替换为您需要的版本,假设您需要PHP7.4,就把 71 换为 74 即可;

3、把 php-cgi-56.sock; 中的56替换为站点的PHP版本,假设您原来站点使用的是PHP7.0,就把 56换为 70 即可;

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册   扫一扫,用微信登录

x
碧芙清 发表于 2020-8-20 18:49:29 | 显示全部楼层
……
info2s 发表于 2020-8-21 16:34:10 | 显示全部楼层
LZ是天才,坚定完毕
冰喜谋 发表于 2020-8-21 17:43:59 | 显示全部楼层
呵呵。。。
恩炎骟 发表于 2020-8-24 12:13:50 | 显示全部楼层
众里寻他千百度,蓦然回首在这里!
田园居士 发表于 2020-8-25 15:35:10 | 显示全部楼层
边撸边过
继青阡 发表于 2020-8-25 21:01:21 | 显示全部楼层
发发呆,回回帖,工作结束~
cxq2008 发表于 2020-8-31 10:51:56 | 显示全部楼层
元芳你怎么看?
莛芬歌 发表于 2020-9-2 21:59:14 | 显示全部楼层
鼎力支持!!
tuoenping 发表于 2020-9-2 22:34:07 | 显示全部楼层
鼎力支持!!
您需要登录后才可以回帖 登录 | 注册   扫一扫,用微信登录

本版积分规则

关闭

站长推荐上一条 /2 下一条

  

     
您需要 登录 后才可以回复,没有帐号?立即注册 使用QQ帐号登录 使用新浪微博帐号登录
高级模式意见反馈自定内容自定内容

QQ|小黑屋|手机版|Archiver|站长论坛 ( 京ICP备07012378号  

GMT+8, 2021-1-17 05:34 , Processed in 0.046625 second(s), 26 queries , Xcache On.

Powered by Discuz! X3.2 © 2001-2013 Comsenz Inc.