宝塔同一域名配置不同PHP版本

同一域名配置不同php版本的需求来源于微擎,微擎应用开发者采取的php版本较多,从php5.6到php7.3版本都有,而微擎用户又大多不会购买一个应用,所以就导致了同一站点不同php版本共存,本篇文章就讲解了微擎系统同一站点下配置不同版本的教程

1 应用场景

微擎用户安装了一个站点 www.abc.com 并配置宝塔对网站进行管理,同时站点下购买了应用a(要求php运行版本5.6),应用b(要求php运行版本7.2),这就要求通过站点www.abc.com访问时 根据访问的应用是a还是b来自动切换成php版本,保证这个站点下可以同时使用a b两个应用。

2 原理(以宝塔面板为例)

1 首先我们在运行环境中安装所需要的PHP版本。

2021011602464240

2 配置文件

1)凡是用宝塔面板搭建服务器环境,Nginx及PHP的安装目录均在/www/server/下。Nginx配置文件ngin.conf在/www/server/nginx/conf/下。各个站点(网站)的配置文件在/www/server/panel/vhost/nginx/目录下,拿一个配置文件来说,其内容如下

server
{
listen 80;
listen 443 ssl http2;
server_name www.abc.com;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/www.abc.com;

#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
ssl_certificate /www/server/panel/vhost/cert/www.abc.com/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/www.abc.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-56.conf;
#PHP-INFO-END

#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/panel/vhost/rewrite/www.abc.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.abc.com.log;
error_log /www/wwwlogs/www.abc.com.error.log;
}

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

location ~ [^/]\.php(/|$)
{
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi-56.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版本,所有问题便可迎刃而解。

3 同一域名配置不同PHP版本教程

宝塔面板的站点配置文件中把站点配置文件中的 include enable-php-56.conf; 替换成下面的代码:

location ~ [^/]\.php(/|$) {
if ($request_uri ~* "Superman_mall"){   //把 yb_shopv2_video替换成你要调整版本的微擎应用标识
fastcgi_pass unix:/tmp/php-cgi-72.sock;   //把72改成你上边应用模块的所需要的的版本
}else{
fastcgi_pass unix:/tmp/php-cgi-56.sock;   //这个地方56改成你原来站点的版本
fastcgi_index index.php;
include fastcgi.conf;
include pathinfo.conf;
   }
}

这样我们就把站点配置好了

本文来自投稿,不代表微擎百科立场,如若转载,请注明出处:https://www.w7.wiki/operation/4859.html

发表评论

登录后才能评论

评论列表(2条)

  • 孑城
    孑城 2021年4月21日 17:51

    要是多个不同的模块都要使用PHP版本怎么弄,7.0 7.1 7.2 都要用的咋弄