如何在Nginx中使用不同的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的文件。

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

[Default]
# yum-config-manager --enable remi-php71 
# 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 , MariaDBPHP-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.要應用上面所做的所有更改,您需要重新啓動Nginx , php-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版本部署文件和測試網站。 如果您有任何補充或提出的問題,請使用下面的評論表格。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章