有时PHP开发人员想要在同一个Web服务器上使用不同版本的PHP来构建和运行不同的网站/应用程序。 作为一名Linux系统管理员,您需要设置一个环境,使您可以在单个Web服务器(即Nginx)上使用不同的PHP版本运行多个网站。
在本教程中,我们将向您解释如何安装多个版本的PHP,并配置Web服务器Nginx,以使用LEMP在CentOS / RHEL 7发行版中通过服务器模块( Apache中的虚拟主机 )使用它们。
Nginx使用PHP-FPM (代表FastCGI进程管理器 ),这是一个替代的PHP FastCGI实现,它为一些重负载的网站提供了一些额外的有用功能。
测试环境设置
- CentOS 7或RHEL 7服务器,安装最少。
- Nginx的HTTP服务器。
- PHP 7.1(用作默认版本)和5.6。
- MariaDB数据库服务器。
- 服务器IP地址: 192.168.56.10 。
- 网站: example1.com和example2.com 。
第1步:安装和启用EPEL和Remi存储库
1.首先安装并启用EPEL和Remi存储库,该存储库在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版本
第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 , MariaDB和PHP-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
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
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-fpm和php56-php-fpm 。 但是你可以首先检查Nginx配置文件是否存在任何语法错误。
# nginx -t # systemctl restart nginx php-fpm php56-php-fpm
验证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 5.6版本
而已! 现在,您可以使用不同的PHP版本部署文件和测试网站。 如果您有任何补充或提出的问题,请使用下面的评论表格。