如何在Nginx中使用不同的PHP版本运行多个网站

有时PHP开发人员想要在同一个Web服务器上使用不同版本的PHP来构建和运行不同的网站/应用程序。 作为一名Linux系统管理员,您需要设置一个环境,使您可以在单个Web服务器(即Nginx)上使用不同的PHP版本运行多个网站。

在本教程中,我们将向您解释如何安装多个版本的PHP,并配置Web服务器Nginx,以使用LEMPCentOS / RHEL 7发行版中通过服务器模块( Apache中的虚拟主机 )使用它们。

Nginx使用PHP-FPM (代表FastCGI进程管理器 ),这是一个替代的PHP FastCGI实现,它为一些重负载的网站提供了一些额外的有用功能。

测试环境设置

  1. CentOS 7RHEL 7服务器,安装最少。
  2. Nginx的HTTP服务器。
  3. PHP 7.1(用作默认版本)和5.6。
  4. MariaDB数据库服务器。
  5. 服务器IP地址: 192.168.56.10 。
  6. 网站: example1.comexample2.com 。

第1步:安装和启用EPEL和Remi存储库

1.首先安装并启用EPELRemi存储库,该存储库在CentOS / RHEL 7发行版上提供最新版本的PHP

# yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

2.接下来安装yum-utils软件包,它扩展了yum的本地功能,并提供yum-config-manager命令,该命令用于启用或禁用系统上的Yum存储库。

# yum install yum-utils

注意 :在RHEL 7上 ,可以使用以下命令为某些依赖项启用可选通道。

# subscription-manager repos --enable=rhel-7-server-optional-rpms

第2步:安装Nginx Web服务器

3.要安装最新版本的Nginx,我们需要添加官方的Nginx仓库,创建一个名为/etc/yum.repos.d/nginx.repo的文件。

# vim /etc/yum.repos.d/nginx.repo

根据您的分配将以下行添加到文件中。

--------------- On CentOS 7 --------------- 
[nginx] 
name=nginx repo 
baseurl=http://nginx.org/packages/centos/7/$basearch/ 
gpgcheck=0 
enabled=1 
--------------- On RHEL 7 ---------------
[nginx] 
name=nginx repo 
baseurl=http://nginx.org/packages/rhel/7.x/$basearch/ 
gpgcheck=0 
enabled=1 

4.一旦添加了nginx回购,您可以使用yum包管理器工具来安装Nginx,如图所示。

# yum install nginx

第3步:安装MariaDB数据库服务器

5.要安装最新版本的MariaDB,我们需要添加官方的MariaDB存储库,创建一个名为/etc/yum.repos.d/mariadb.repo的文件。

# vi /etc/yum.repos.d/mariadb.repo

根据您的分配将以下行添加到文件中。

--------------- On CentOS 7 --------------- 
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
--------------- On RHEL 7 ---------------
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/rhel7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1 

6.一旦添加MariaDB回购,您可以使用yum包管理器工具安装MariaDB,如图所示。

# yum install MariaDB-client MariaDB-server

7.之后,使用下面的脚本保护数据库服务器的安装。 设置一个root密码并回答y ,然后按回车键以禁止远程root用户登录,删除匿名用户帐户和测试数据库,默认情况下,所有用户甚至匿名用户都可以访问该数据库。

# mysql_secure_installation

另请参阅 : 适用于Linux的12个MySQL / MariaDB安全性最佳实践

第4步:安装多个版本的PHP

8.要为您的项目安装不同版本的PHP,请使用yum-config-manager命令安装多个版本的PHP以及大多数必需的模块,如图所示。

安装PHP 7.1版本

[Default]
# yum-config-manager --enable remi-php71 
# yum install php php-common php-fpm
# yum install php-mysql php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml php-pecl-apc php-cli php-pear php-pdo

安装PHP 5.6版本

# yum install php56 php56-php-common php56-php-fpm
# yum install php56-php-mysql php56-php-pecl-memcache php56-php-pecl-memcached php56-php-gd php56-php-mbstring php56-php-mcrypt php56-php-xml php56-php-pecl-apc php56-php-cli php56-php-pear php56-php-pdo

9.一旦安装了PHP,您可以使用以下命令来检查服务器上使用的PHP的默认版本。

# php -v

 

检查默认的PHP版本

第5步:配置PHP-FPM和PHP56-PHP-FPM

10.这是本教程中最有趣的部分,它解释了如何在服务器上运行多个PHP版本。 在这里,您将配置Nginx将使用的不同版本的php-fpm 。 您应该定义FastCGI进程的用户/组以及他们将要监听的端口。

这些是您将要编辑的以下两个配置文件。

  • php-fpm (默认7.1) - /etc/php-fpm.d/www.conf
  • php56-php-fpm - /opt/remi/php56/root/etc/php-fpm.d/www.conf

打开上面的文件,设置FastCGI进程的用户/组。

# vi /etc/php-fpm.d/www.conf   [PHP 7.1]
# vi /opt/remi/php56/root/etc/php-fpm.d/www.conf  [PHP 5.6] 

默认值应该是apache ,如图所示将它们改为nginx 。

user = nginx
group = nginx

11.接下来,找到listen参数,并定义接收FastCGI请求的地址:端口 。

listen = 127.0.0.1:9000	[php-fpm]
listen = 127.0.0.1:9001	[php56-php-fpm]

12.完成上述所有配置之后,您需要启动并启用Nginx , MariaDBPHP-FPM以在系统引导时自动启动。

# systemctl enable nginx 
# systemctl start nginx 
# systemctl enable mariadb 
# systemctl start mariadb 
---------------- PHP 7.1 ---------------- 
# systemctl enable php-fpm 
# systemctl start php-fpm 
---------------- PHP 5.6 ----------------
# systemctl enable php56-fpm 
# systemctl start php56-php-fpm 

注意 :如果在启动第二个PHP实例php56-php-fpm时出现任何错误,SELinux策略可能会阻止它启动。 如果SELinux处于强制模式 ,请将其设置为宽容模式 ,然后再次尝试启动该服务。

# getenforce
# setenforce 0 

第6步:使用权限设置网站

13.现在,您可以在/ var / www / html /下为您的网站创建必要的目录。 您还需要创建目录来存储日志,如下所示:

---------------- Website 1 ----------------
# mkdir -p /var/www/html/example1.com/ 
# mkdir -p /var/www/html/example2.com/ 
---------------- Website 2 ----------------
# mkdir -p /var/log/nginx/example1.com/ 
# mkdir -p /var/log/nginx/example2.com/ 

14.在所有目录上设置适当的所有权限。

---------------- Website 1 ----------------
# chown -R root:nginx /var/www/html/example1.com/ 
# chmod -R 755 /var/www/html/example1.com/ 
# chown -R root:nginx /var/log/nginx/example1.com/
# chmod -R 660 /var/log/nginx/example1.com/ 
---------------- Website 2 ----------------
# chown -R root:nginx /var/www/html/example2.com/ 
# chmod -R 755 /var/www/html/example2.com/
# chown -R root:nginx /var/log/nginx/example2.com/ 
# chmod -R 660 /var/log/nginx/example2.com/

第7步:为网站设置Nginx服务器块

15.现在配置Nginx如何使用应位于/etc/nginx/conf.d/中的服务器块配置文件处理请求到您的网站。

为以.conf扩展名结尾的网站创建配置文件。

# vi /etc/nginx/conf.d/example1.com.conf
# vi /etc/nginx/conf.d/example2.com.conf

然后将以下服务器块配置粘贴到相应的文件中。

网站1

example1.com的配置

server {
    listen 80;
    server_name example1.com www.example1.com;
    root   /var/www/html/example1.com/;
    index index.php index.html index.htm;
    #charset koi8-r;
    access_log /var/log/nginx/example1.com/example1_access_log;
    error_log   /var/log/nginx/example1.com/example1_error_log   error;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

    location ~ \.php$ {
        root    /var/www/html/example1.com/;
        fastcgi_pass   127.0.0.1:9000;	#set port for php-fpm to listen on
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include         fastcgi_params;
        include /etc/nginx/fastcgi_params;
}
}

网站2

example2.com的配置

server {
    listen 80;
    server_name example2.com www.example2.com;
    root    /var/www/html/example2.com/;
    index index.php index.html index.htm;
    #charset koi8-r;
    access_log /var/log/nginx/example2.com/example2_access_log;
    error_log  /var/log/nginx/example2.com/example2_error_log   error;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

    location ~ \.php$ {
        root    /var/www/html/example2.com/;
        fastcgi_pass   127.0.0.1:9001;	#set port for php56-php-fpm to listen on
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include         fastcgi_params;
        include /etc/nginx/fastcgi_params;
    }
}

16.确保在/etc/nginx/nginx.conf的http块的结尾部分有下列行。 当Nginx运行时,将所有配置文件包含在/etc/nginx/conf.d/目录中会有帮助。

include /etc/nginx/conf.d/*.conf;

第8步:测试不同的PHP版本

17.最后,你需要测试你的服务器是否使用了两个版本的PHP。 您可以在网站的文档根目录中创建一个非常基本的info.php脚本,如图所示。

# echo "<?php phpinfo(); ?>" > /var/www/html/example1.com/info.php
# echo "<?php phpinfo(); ?>" > /var/www/html/example2.com/info.php

18.要应用上面所做的所有更改,您需要重新启动Nginx , php-fpmphp56-php-fpm 。 但是你可以首先检查Nginx配置文件是否存在任何语法错误。

# nginx -t 
# systemctl restart nginx php-fpm php56-php-fpm

验证Nginx配置

验证Nginx配置

19.还有一件事要做,特别是如果你在本地运行你的服务器,你需要使用/ etc / hosts文件来设置本地DNS,如下面的屏幕截图所示。

192.168.56.10   example1.com   example1
192.168.56.10   example2.com   example2

添加网站到主机文件

添加网站到主机文件

20.最后,打开Web浏览器并键入以下地址以验证系统上安装的PHP版本。

http://example1.com/index.php
http://example2.com/index.php

检查PHP 7.1版本

检查PHP 7.1版本

检查PHP 5.6版本

检查PHP 5.6版本

而已! 现在,您可以使用不同的PHP版本部署文件和测试网站。 如果您有任何补充或提出的问题,请使用下面的评论表格。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过以下步骤在LNMP同时运行多个版本PHP: 1. 安装需要的PHP版本,例如PHP5.6和PHP7.2。可以使用yum或者编译安装的方式安装。 2. 配置Nginx的FastCGI参数,打开nginx.conf文件,在http块添加以下代码: ``` fastcgi_param PHP56_PATH /usr/bin/php-cgi56; fastcgi_param PHP72_PATH /usr/bin/php-cgi72; ``` 其PHP56_PATH和PHP72_PATH是自定义的参数名称,/usr/bin/php-cgi56和/usr/bin/php-cgi72是PHP5.6和PHP7.2的CGI程序路径。 3. 配置Nginx的虚拟主机,打开虚拟主机配置文件,在server块添加以下代码: ``` location ~ \.php$ { fastcgi_pass unix:/var/run/php56-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_param PHP_VALUE "error_log=/var/log/nginx/php56_error.log"; fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root:/tmp/:/proc/"; } location ~ \.php72$ { fastcgi_pass unix:/var/run/php72-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_param PHP_VALUE "error_log=/var/log/nginx/php72_error.log"; fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root:/tmp/:/proc/"; } ``` 其location ~ \.php$是PHP5.6的配置,location ~ \.php72$是PHP7.2的配置。需要注意的是,这里的fastcgi_pass需要与PHP版本对应的fastcgi_param参数名称一致,例如PHP5.6对应的是fastcgi_param PHP56_PATH,所以fastcgi_pass的值也要对应为unix:/var/run/php56-fpm.sock。 4. 配置PHP的FastCGI进程管理器,打开php-fpm的配置文件,修改以下参数: ``` ;php56-fpm.conf listen = /var/run/php56-fpm.sock listen.owner = nginx listen.group = nginx listen.mode = 0660 ;php72-fpm.conf listen = /var/run/php72-fpm.sock listen.owner = nginx listen.group = nginx listen.mode = 0660 ``` 其listen是FastCGI监听的地址,可以使用unix域套接字或者TCP/IP套接字,这里使用unix域套接字。listen.owner和listen.group是FastCGI进程的用户和用户组,这里设置nginx。listen.mode是unix域套接字的权限。 5. 启动PHP-FPMNginx服务,使用以下命令启动服务: ``` systemctl start php56-fpm php72-fpm nginx ``` 6. 测试多版本PHP是否正常,可以在网站根目录下创建一个test.php文件,内容如下: ``` <?php phpinfo(); ?> ``` 在浏览器访问http://yourdomain.com/test.php,可以看到PHP版本信息。如果可以看到不同PHP版本信息,说明多版本PHP已经成功运行

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值