微擎单个域名怎么配置多版本PHP

阅读 6  ·  发布时间 0220  ·  掀浪

同一个域名同一个站点(单域名)配置多版本PHP的需求来源于微擎,微擎应用市场中的应用开发者所采用的PHP版本较多,低到PHP5.4高至PHP7.4横跨多个版本,正所谓众口难调。而微擎玩家又不可能只购买一个应用,这就需要多版本PHP共存。这篇文章以用宝塔面板搭建环境的云服务器为例,讲解微擎系统同一个域名同一个站点(单域名)配置多版本php的原理及教程。


准备工作

1:微擎安装完毕

2:宝塔面板linux版本,(Windows的没测试过是否一致可以使用,不建议使用)

3:宝塔安装好PHP 所需要共存的版本,宝塔本身支持

4:该教程说明是单域名,非利用微擎创建多个站点实现的PHP版本



同一个站点(单域名)配置多版本PHP的实现原理


以下原理分析是以宝塔面板为例,并且运行环境中已经安装了多个版本的PHP,凡是用宝塔面板搭建的云服务器环境,nginx和PHP的安装目录均在/www/server/下。nginx配置文件nginx.conf在/www/server/nginx/conf/下。各个站点(网站)的配置文件在/www/server/panel/vhost/nginx/目录下。拿其中一个站点(网站)的配置文件来说,其内容如下:

举例域名:www.baidu.com

server
{
    listen 80;
	listen 443 ssl http2;
    server_name www.baidu.com;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/www.baidu.com/;
    
    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    #HTTP_TO_HTTPS_START
    if ($server_port !~ 443){
        rewrite ^(/.*)$ https://$host$1 permanent;
    }
    #HTTP_TO_HTTPS_END
    ssl_certificate    /www/server/panel/vhost/cert/www.baidu.com/fullchain.pem;
    ssl_certificate_key    /www/server/panel/vhost/cert/www.baidu.com/privkey.pem;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    add_header Strict-Transport-Security "max-age=31536000";
    error_page 497  https://$host$request_uri;




    #SSL-END
    
    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    #error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END
    
    #PHP-INFO-START  PHP引用配置,可以注释或修改
    include enable-php-72.conf;
    #include up.conf;
    #PHP-INFO-END
    
    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/www.dieseo.com.conf;
    #REWRITE-END
    
    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }
    
    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }
    
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log off;
        access_log /dev/null;
    }
    
    location ~ .*\.(js|css)?$
    {
        expires      12h;
        error_log off;
        access_log /dev/null; 
    }
    access_log  /www/wwwlogs/www.baidu.com.log;
    error_log  /www/wwwlogs/www.baidu.com.error.log;
}

上面文件中的内容重点关注 include enable-php-72.conf; 这一项。找到enable-php-72.conf 配置文件并打开(该文件的路径在/www/server/nginx/conf/enable-php-72.conf),看到如下内容:

	location ~ [^/]\.php(/|$)
	{
		try_files $uri =404;
		fastcgi_pass  unix:/tmp/php-cgi-72.sock;
		fastcgi_index index.php;
		include fastcgi.conf;
		include pathinfo.conf;
	}

看到这里,我们大致了解了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-72.conf; 替换成下面的代码:

    location ~ [^/]\.php(/|$) {
    if ($request_uri ~* "yb_shopv2_video"){ //把yb_shopv2换你要的应用
    fastcgi_pass unix:/tmp/php-cgi-71.sock; //把71改成你应用需要的版本
    }
    fastcgi_pass unix:/tmp/php-cgi-72.sock; //这个72你原来站点的版本
    fastcgi_index index.php;
    include fastcgi.conf;
    include pathinfo.conf;
    }

注意代码后面的//文字需要删除掉,不然你保存不了配置文件。