首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Linux 多 PHP 版本共存配置 Nginx 切換(PHP 5.2 + 5.3 實戰)

     編輯:PHP 綜合知識

場景

舊專案僅支援 PHP 5.2,新專案需 PHP 5.3+,同一台伺服器需同時運行兩版本,Nginx 根據域名/路徑分發至對應 PHP-FPM。

核心原理

PHP-FPM 監聽不同端口或 Unix Socket,Nginx fastcgi_pass 指向對應端口/Socket。

步驟一:編譯安裝 PHP 5.2.14 + FPM

# 依賴
yum install -y libxml2-devel openssl-devel bzip2-devel libcurl-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel mhash-devel

# 下載並打補丁
wget https://museum.php.net/php5/php-5.2.14.tar.gz
wget https://php-fpm.org/downloads/php-5.2.14-fpm-0.5.14.diff.gz
tar zxf php-5.2.14.tar.gz
gzip -cd php-5.2.14-fpm-0.5.14.diff.gz | patch -d php-5.2.14 -p1

# 編譯(需 autoconf 2.13)
cd php-5.2.14
export PHP_AUTOCONF=/usr/local/autoconf-2.13/bin/autoconf
export PHP_AUTOHEADER=/usr/local/autoconf-2.13/bin/autoheader
./buildconf --force
./configure --prefix=/usr/local/php-5.2.14 \
    --with-config-file-path=/usr/local/php-5.2.14/etc \
    --with-mysql=/usr/local/mysql \
    --with-mysqli=/usr/local/mysql/bin/mysql_config \
    --enable-fastcgi --enable-fpm \
    --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir \
    --with-zlib --with-curl --with-mcrypt --enable-mbstring --enable-zip
make ZEND_EXTRA_LIBS='-liconv' && make install

步驟二:配置 php-fpm.conf 監聽端口 9001

127.0.0.1:9001
0

步驟三:啟動並設定開機自啟

/usr/local/php-5.2.14/sbin/php-fpm start
# 加入 /etc/rc.local 或 systemd 服務單元

步驟四:Nginx 虛擬主機分發

# 站點 A:需 PHP 5.2
server {
    listen 80;
    server_name legacy.example.com;
    root /www/legacy;
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9001;  # PHP 5.2
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

# 站點 B:PHP 5.3/5.4/7.x (主版本,監聽 9000)
server {
    listen 80;
    server_name modern.example.com;
    root /www/modern;
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;  # 主 PHP-FPM
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

步驟五:驗證

curl -H "Host: legacy.example.com" https://127.0.0.1/phpinfo.php
curl -H "Host: modern.example.com" https://127.0.0.1/phpinfo.php

進階:Unix Socket 替代端口(效能略優)

/tmp/php-5.2.14.sock
fastcgi_pass unix:/tmp/php-5.2.14.sock;

常見坑點

問題解決
PHP 5.2 編譯報錯 iconvmake ZEND_EXTRA_LIBS='-liconv'
php-fpm 無法啟動檢查 php-fpm.conf pid_file 路徑、用戶組權限
Nginx 502 Bad Gateway確認 fastcgi_pass 端口/Socket 正確、php-frm 進程存活、防火牆
session 衝突不同版本設定不同 session.save_path 或前綴

總結

多 PHP 版本共存 = 多 PHP-FPM 實例 + Nginx 分發。關鍵步驟:獨立編譯安裝目錄、獨立 php.ini/php-fpm.conf、獨立監聽端口/Socket、Nginx 按站點指向對應端口。現代部署建議改用 Docker 容器隔離,更乾淨可遷移。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved