如何在Ubuntu 18.04和16.04安装Apache和多个版本的PHP

时间:2019-05-29 14:48:09  来源:igfitidea点击:

通常,主机管理器为每个PHP版本应用程序部署使用一个单独的服务器。
这就增加了托管成本。
一些主机管理器使用Docker在一台服务器上运行多个PHP版本。

本教程将在Ubuntu 18.04和16.04系统上安装多个PHP版本的Apache,而不需要切换PHP版本。
本教程介绍了在Apache上使用单独的PHP版本安装和配置两个虚拟主机。
第一个虚拟主机使用PHP 5.6,另一个虚拟主机使用PHP 7.2。
所以,只要完成本教程。
我们还可以根据需要在Apache中使用两个以上的PHP版本,但是本教程只介绍两个。

Apache安装

从官方存储库安装Apache web服务器。
在系统上启动终端或使用ssh登录远程系统。
执行以下命令安装Apache web服务器的最新可用版本。

sudo apt update 
sudo apt install apache2 libapache2-mod-fastcgi 

## Ubuntu 18.04 系统,使用下面命令:
sudo apt install apache2 libapache2-mod-fcgid

PHP安装

对于PHP版本的安装,我们使用这里维护的PPA。
使用以下命令将PPA添加到系统中。

###  Ubuntu 18.04  
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php

###  Ubuntu 16.04  
sudo apt install python-software-properties
sudo add-apt-repository ppa:ondrej/php

在本教程中,我们使用PHP 5.6和PHP 7.2来配置Apache web服务器。
为了使用多个PHP版本,我们将使用PHP FPM和FastCGI。
让我们在系统上安装以下软件包。

apt update
sudo apt install php5.6 php5.6-fpm
sudo apt install php7.2 php7.2-fpm

安装完成后,php-fpm服务将自动启动。
使用以下命令确保两个服务都在运行。

sudo systemctl status php5.6-fpm
sudo systemctl status php7.2-fpm

Apache配置

现在启用Apache中多个PHP版本的配置所需的几个模块。
这些模块是将PHP FPM和FastCGI与Apache server集成所必需的。

sudo a2enmod actions fastcgi alias proxy_fcgi

Ubuntu 18.04 Users:
sudo a2enmod actions fcgid alias proxy_fcgi

准备在Apache服务器上配置网站。
出于测试的目的,我配置了两个网站来使用两个不同的PHP版本。
首先,在服务器上创建两个目录。

sudo mkdir /var/www/php56
sudo mkdir /var/www/php72

现在,创建两个index.php文件。

echo "<?php phpinfo(); ?>" > /var/www/php56/index.php
echo "<?php phpinfo(); ?>" > /var/www/php72/index.php

让我们开始创建虚拟主机。
Apache将所有虚拟主机配置文件保存在 /etc/apache2/sites-available下,扩展名为.conf。
为第一个虚拟主机创建一个文件。本网站配置为使用PHP 5.6。

sudo vim /etc/apache2/sites-available/php56.example.com.conf

添加以下内容。

<VirtualHost *:80>
    ServerName php56.example.com
    DocumentRoot /var/www/php56
    <Directory /var/www/php56>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted
    </Directory>
    <FilesMatch \.php$>
        # Apache 2.4.10+ can proxy to unix socket
        SetHandler "proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost"
    </FilesMatch>
</VirtualHost>

类似地,创建第二个VirtualHost配置文件来使用PHP 7.2。

sudo vim /etc/apache2/sites-available/php72.example.com.conf

将以下内容添加到文件中。(注意修改ServerName和DocumentRoot)

<VirtualHost *:80>
    ServerName php72.example.com
    DocumentRoot /var/www/php72
    <Directory /var/www/php72>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted
    </Directory>
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost"
    </FilesMatch>
</VirtualHost>

你们两个网站现在都配置好了。
但还未激活。
Apache将活动站点保存在 /etc/apache2/sites-enabled目录下。
你可以简单地创建一个配置文件到这个目录的符号链接,或者使用下面的命令。

sudo a2ensite php56.example.com
sudo a2ensite php72.example.com

完成所有更改之后,重新启动Apache以重新加载新的设置更改。

sudo systemctl restart apache2

设置现在已经完成。

测试设置

编辑/etc/hosts文件,并创建如下条目。

sudo vim /etc/hosts

127.0.0.1 php72.example.com
127.0.0.1 php56.example.com

打开web浏览器并访问这两个站点。

http://php72.example.com
http://php56.example.com

我们将看到, php56.example.com显示的是版本 PHP 5.6
php72.example.com显示的是 PHP 7.2