Nginx 是一個高性能的 HTTP 和反向代理服務器。與 Apache 不同的是,Nginx 的設計是專為高并發(fā)環(huán)境下的性能優(yōu)化而創(chuàng)建的。由于其優(yōu)秀的性能和可擴展性,Nginx 近幾年迅速贏得了廣泛的認可和支持。但是在一些 PHP 應用開發(fā)中,需要使用不同的版本,那么,如何在 Nginx 上設置多版本的 PHP 呢?
一、Nginx 安裝
首先,我們需要在系統(tǒng)上安裝 Nginx。在大多數(shù) Linux 發(fā)行版中,可以使用包管理器來安裝:
sudo apt-get install nginx
在 CentOS 或 RHEL 等系統(tǒng)中可以使用 yum 命令進行安裝:sudo yum install nginx
二、PHP 版本安裝
由于我們需要設置多個 PHP 版本,因此我們需要安裝多個 PHP 版本。這里以 PHP 7.1 和 PHP 7.2 為例進行介紹。
1、安裝 PHP 7.1sudo apt-get install php7.1 php7.1-fpm
2、安裝 PHP 7.2sudo apt-get install php7.2 php7.2-fpm
如果需要安裝其他版本的 PHP,只需要將命令中的版本號替換為對應的版本號。
三、Nginx 配置
設置多版本 PHP 的關鍵在于修改 Nginx 的配置文件。在 Ubuntu 系統(tǒng)中,Nginx 默認的配置文件存放在 /etc/nginx/sites-available/default。
我們需要在這個文件中進行修改。
1、備份默認配置文件
在修改配置文件之前,我們需要先備份一下默認配置文件。這是一個比較好的習慣,以便出現(xiàn)問題時可以快速地還原回去。sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default-backup
2、修改配置文件
我們需要根據(jù)實際情況進行修改。在這里,我們首先需要聲明 PHP 的位置,以便在訪問 PHP 文件時可以執(zhí)行指定版本的 PHP 代碼。location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
在上述代碼中,fastcgi_pass 指令用于指定 PHP-FPM 進程的通信方式,可以通過本地進程,TCP/IP 連接或者 UNIX 域套接字來實現(xiàn)。通過上述代碼,我們使用了 UNIX 域套接字,因此在之前安裝 PHP 時也需要安裝相應的組件。
同時,我們還需要修改 fastcgi_pass 和 SCRIPT_FILENAME,以便使用不同版本的 PHP。例如,以下代碼表示使用 PHP 7.1:location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
同樣,我們也可以將 fastcgi_pass 替換為 TCP/IP 連接:location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
在上述代碼中,fastcgi_pass 指向了 127.0.0.1:9000,在這里 9000 是 PHP-FPM 程序的默認端口,當然,可以通過修改 php-fpm.conf 文件來更改端口。
四、PHP 版本切換
現(xiàn)在,我們已經(jīng)完成了 Nginx 的配置,那么如何在執(zhí)行 PHP 代碼時切換 PHP 版本呢?
1、手動切換
手動切換是通過修改 Nginx 配置文件中的 fastcgi_pass 來實現(xiàn) PHP 版本切換的。例如,在上述配置文件中,我們已經(jīng)聲明了 PHP 7.2 的位置,如果需要切換到 PHP 7.1,我們只需要將位置修改為相應的 PHP 7.1 即可,如下所示:location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
然后,重新加載 Nginx,使其重新讀取配置文件即可。
2、通過自動化腳本實現(xiàn)
手動修改 Nginx 配置文件比較繁瑣,我們也可以通過自動化腳本來實現(xiàn) PHP 版本的切換。這里以 PHPBrew 為例,PHPBrew 是一款 PHP 多版本管理工具。
首先,安裝 PHPBrew:curl -L -O https://github.com/phpbrew/phpbrew/releases/latest/download/phpbrew.phar
chmod +x phpbrew.phar
sudo mv phpbrew.phar /usr/local/bin/phpbrew
sudo phpbrew init
source ~/.bashrc
然后安裝所需的 PHP 版本:phpbrew install php-7.1
phpbrew install php-7.2
在安裝完成后,我們需要激活一個 PHP 版本,例如:phpbrew switch php-7.1.33
然后,我們可以通過以下方式來獲取所選 PHP 版本的二進制路徑:phpbrew path
然后將它添加到環(huán)境變量 PATH 中:export PATH=$PATH:/home/user/.phpbrew/php/php-7.1.33/bin # 此處改為自己的路徑
最后,重新啟動 PHP-FPM。
五、總結
通過上述步驟,我們實現(xiàn)了在 Nginx 上設置多版本 PHP 的目的,以便我們在進行 PHP 應用開發(fā)時可以使用不同版本的 PHP。注意,并不是說多安裝幾個版本就可以輕松實現(xiàn)多 PHP 版本的切換,還需要修改 Nginx 或者使用自動化腳本等方式來完成。上一篇nginx解釋php
下一篇css3中 linear