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

在本教程中,我们将介绍如何安装多个版本的PHP,并配置Nginx在CentOS 7上运行多个不同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的文件。

# vi /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版本

# yum-config-manager --enable remi-php71  [Default]
# 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版本

检查默认的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.完成上述所有配置之后,您需要启动并启用NginxMariaDBPHP-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.要应用上面所做的所有更改,您需要重新启动Nginxphp-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版本部署文件和测试网站。 如果您有任何补充或提出的问题,请使用下面的评论表格。