介绍
在Apache Web服务器使用虚拟主机上的单个实例管理多个域。同样,PHP-FPM使用守护程序在单个实例上管理多个PHP版本。您可以一起使用Apache和PHP-FPM托管多个PHP Web应用程序,每个Web应用程序都使用不同版本的PHP,并且全部都在同一服务器上,并且同时全部。这很有用,因为不同的应用程序可能需要不同版本的PHP,但是某些服务器堆栈(如定期配置的LAMP堆栈)只能管理一个。与将每个应用程序托管在自己的实例上相比,将Apache与PHP-FPM结合起来也是一种更具成本效益的解决方案。
PHP-FPM也提供配置选项,stderr
以及stdout
日志记录,紧急重新启动和适应过程产卵,这是重载的网站是有用的。实际上,将Apache与PHP-FPM结合使用是托管PHP应用程序的最佳堆栈之一,尤其是在性能方面。
在本教程中,您将在单个实例上设置两个PHP网站。每个站点都将使用其自己的域,并且每个域都将部署其自己的PHP版本。首先,site1.your_domain
将部署PHP 7.3。第二个site2.your_domain
将部署PHP 7.4。
先决条件
- 通过使用CentOS 8进行初始服务器设置来设置一台至少具有1GB RAM的CentOS 8服务器,包括
sudo
非root用户和防火墙。 - 通过遵循如何在CentOS 8上安装 Apache Web服务器来设置和配置Apache Web服务器。
- 配置为指向您的CentOS 8服务器的域名。通过遵循如何从公共域注册商指向DigitalOcean域名服务器,您可以学习如何将域指向DigitalOcean Droplet 。就本教程而言,您将使用两个子域,每个子域
A
在DNS设置中均指定了一条记录:site1.your_domain
和site2.your_domain
。
第1步-使用PHP-FPM安装PHP版本7.3和7.4
完成前提条件后,您现在将安装PHP版本7.3和7.4,以及PHP-FPM和一些其他扩展。为了安装PHP的多个版本,您将需要安装Remi存储库并将其启用到系统中。它也提供CentOS 8系统上最新版本的PHP堆栈。
您可以使用以下命令将这两个存储库都添加到系统中:
sudo dnf install http://rpms.remirepo.net/enterprise/remi-release-8.rpm
上面的命令还将启用EPEL存储库。
首先,让我们发现Remi提供了哪些PHP 7版本:
sudo dnf module list php
您将看到类似以下的输出:
OutputRemi's Modular repository for Enterprise Linux 8 - x86_64
Name Stream Profiles Summary
php remi-7.2 common [d], devel, minimal PHP scripting language
php remi-7.3 common [d], devel, minimal PHP scripting language
php remi-7.4 common [d], devel, minimal PHP scripting language
接下来,禁用默认的PHP模块,并使用以下命令启用Remi的PHP7.3模块:
sudo dnf module reset php
sudo dnf module enable php:remi-7.3
让我们开始安装php73
和php73-php-fpm
:
sudo dnf install php73 php73-php-fpm -y
php73
是一个可用于运行PHP应用程序的元包。php73-php-fpm
提供作为守护程序运行并接收Fast / CGI请求的Fast Process Manager解释器。
现在,为PHP 7.4重复该过程。安装php74
和php74-php-fpm
。
sudo dnf module reset php
sudo dnf module enable php:remi-7.4
sudo dnf install php74 php74-php-fpm -y
在安装两个PHP版本之后,启动php73-php-fpm
服务,并使用以下命令使其在启动时启动:
sudo systemctl start php73-php-fpm
sudo systemctl enable php73-php-fpm
接下来,php73-php-fpm
使用以下命令验证服务状态:
sudo systemctl status php73-php-fpm
您将看到以下输出:
● php73-php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php73-php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2020-04-22 05:14:46 UTC; 52s ago
Main PID: 14206 (php-fpm)
Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 6 (limit: 5059)
Memory: 25.9M
CGroup: /system.slice/php73-php-fpm.service
├─14206 php-fpm: master process (/etc/opt/remi/php73/php-fpm.conf)
├─14207 php-fpm: pool www
├─14208 php-fpm: pool www
├─14209 php-fpm: pool www
├─14210 php-fpm: pool www
└─14211 php-fpm: pool www
Apr 22 05:14:46 centos-s-1vcpu-1gb-nyc3-01 systemd[1]: Starting The PHP FastCGI Process Manager...
Apr 22 05:14:46 centos-s-1vcpu-1gb-nyc3-01 systemd[1]: Started The PHP FastCGI Process Manager.
重复此过程,现在启动php74-php-fpm
服务,并使用以下命令使其在启动时启动:
sudo systemctl start php74-php-fpm
sudo systemctl enable php74-php-fpm
然后php74-php-fpm
使用以下命令验证服务状态:
sudo systemctl status php74-php-fpm
您将看到以下输出:
● php74-php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php74-php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2020-04-22 05:16:16 UTC; 23s ago
Main PID: 14244 (php-fpm)
Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 6 (limit: 5059)
Memory: 18.8M
CGroup: /system.slice/php74-php-fpm.service
├─14244 php-fpm: master process (/etc/opt/remi/php74/php-fpm.conf)
├─14245 php-fpm: pool www
├─14246 php-fpm: pool www
├─14247 php-fpm: pool www
├─14248 php-fpm: pool www
└─14249 php-fpm: pool www
Apr 22 05:16:15 centos-s-1vcpu-1gb-nyc3-01 systemd[1]: Starting The PHP FastCGI Process Manager...
Apr 22 05:16:16 centos-s-1vcpu-1gb-nyc3-01 systemd[1]: Started The PHP FastCGI Process Manager.
至此,您已经在服务器上安装了两个PHP版本。接下来,您将为要部署的每个网站创建目录结构。
第2步-为两个网站创建目录结构
在本部分中,您将为两个网站中的每个网站创建一个文档根目录和一个索引页。
首先,为两个目录创建文档根目录 site1。您的域 和 site2.yourdomain:
sudo mkdir /var/www/site1.your_domain
sudo mkdir /var/www/site2.your_domain
默认情况下,Apache Web服务器以 阿帕奇 用户和 阿帕奇组。为确保您具有网站根目录的正确所有权和权限,请执行以下命令:
sudo chown -R apache:apache /var/www/site1.your_domain
sudo chown -R apache:apache /var/www/site2.your_domain
sudo chmod -R 755 /var/www/site1.your_domain
sudo chmod -R 755 /var/www/site2.your_domain
该chown
命令将两个网站目录的所有权更改为apache
用户和apache
组。该chmod
命令更改与该用户和组以及其他用户关联的权限。
接下来,您将info.php
在每个网站根目录中创建一个文件。这将显示每个网站的PHP版本信息。首先site1:
sudo vi /var/www/site1.your_domain/info.php
添加以下行:site1.your_domain / info.php'> / var / www /site1.your_domain/info.php
<?php phpinfo(); ?>
复制
保存并关闭文件。现在将您创建的info.php文件复制到site2:
sudo cp /var/www/site1.your_domain/info.php /var/www/site2.your_domain/info.php
现在,您的Web服务器具有每个站点向访问者提供数据所需的文档根目录。接下来,您将配置Apache Web服务器以使用两个不同的PHP版本。
步骤3 —为两个网站配置Apache
在本节中,您将创建两个虚拟主机配置文件。这将使您的两个网站可以同时使用两个不同的PHP版本。
为了让Apache提供此内容,必须使用正确的指令创建虚拟主机文件。您将在目录中创建两个新的虚拟主机配置文件/etc/httpd/conf.d/
。
首先为网站创建一个新的虚拟主机配置文件 site1.your_domain。在这里,您将指导Apache使用渲染内容php7.3
:
sudo vi /etc/httpd/conf.d/site1.your_domain.conf
添加以下内容。确保网站目录路径,服务器名称和PHP版本与您的设置匹配:/etc/httpd/conf.d/site1.your_domain.conf
<VirtualHost *:80>
ServerAdmin admin@site1.your_domain
ServerName site1.your_domain
DocumentRoot /var/www/site1.your_domain
DirectoryIndex info.php
ErrorLog /var/log/httpd/site1.your_domain-error.log
CustomLog /var/log/httpd/site1.your_domain-access.log combined
<IfModule !mod_php7.c>
<FilesMatch \.(php|phar)$>
SetHandler "proxy:unix:/var/opt/remi/php73/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>
</IfModule>
</VirtualHost>
为DocumentRoot
您指定网站根目录的路径。为ServerAdmin
您添加your_domain
站点管理员可以访问的电子邮件。为ServerName
您添加第一个子域的URL。对于SetHandler 您正在为php7.3指定PHP-FPM套接字文件。
保存并关闭文件。
接下来,为网站创建一个新的虚拟主机配置文件 site2.your_domain。您将指定要部署的子域php7.4
:
sudo vi /etc/httpd/conf.d/site2.your_domain.conf
添加以下内容。再次,确保网站目录路径,服务器名称和PHP版本与您的唯一信息匹配:/etc/httpd/conf.d/site2.your_domain.conf
<VirtualHost *:80>
ServerAdmin admin@site2.your_domain
ServerName site2.your_domain
DocumentRoot /var/www/site2.your_domain
DirectoryIndex info.php
ErrorLog /var/log/httpd/site2.your_domain-error.log
CustomLog /var/log/httpd/site2.your_domain-access.log combined
<IfModule !mod_php7.c>
<FilesMatch \.(php|phar)$>
SetHandler "proxy:unix:/var/opt/remi/php74/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>
</IfModule>
</VirtualHost>
完成后保存并关闭文件。然后,使用以下命令检查Apache配置文件是否存在语法错误:
sudo apachectl configtest
您将看到输出打印Syntax OK
:
OutputSyntax OK
最后,重新启动Apache服务以实现您的更改:
sudo systemctl restart httpd
既然已经配置了Apache为每个站点提供服务,您将对其进行测试以确保正在运行正确的PHP版本。
第4步-测试两个网站
至此,您已经配置了两个网站来运行两个不同版本的PHP。现在测试结果。
打开Web浏览器,并访问这两个网站和。您将看到两个页面,如下所示:http://site1.your_domain
http://site2.your_domain
注意标题。第一页指出site1。您的域部署了7.3版PHP。第二个表明site2.yourdomain 部署了PHP版本7.4。
现在,您已经测试了站点,请删除info.php
文件。因为它们包含有关服务器的敏感信息,并且未经授权的用户可以访问,所以它们构成了安全漏洞。要删除这两个文件,请运行以下命令:
sudo rm -rf /var/www/site1.your_domain/info.php
sudo rm -rf /var/www/site2.your_domain/info.php
现在,您只有一台CentOS 8服务器,可以处理具有两个不同PHP版本的两个网站。但是,PHP-FPM不限于此一个应用程序。
结论
现在,您已经将虚拟主机和PHP-FPM组合在一起,以在单个服务器上为多个网站和PHP的多个版本提供服务。Apache服务可以处理的PHP站点和PHP版本数量的唯一实际限制是实例的处理能力。
从这里开始,您可能会考虑探索PHP-FPM的更高级功能,例如其自适应生成过程或如何记录sdtout
和记录stderr
。另外,您现在可以使用来自Let's Encrypt的免费TLS / SSL证书保护您的网站。
关于CenOS7可以看以下教程