有時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的文件。
# 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 , 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
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-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版本部署文件和測試網站。 如果您有任何補充或提出的問題,請使用下面的評論表格。