柏建明,劉斌文,董銀麟
(中色(寧夏)東方集團有限公司,石嘴山753000)
WampServer(簡稱Wamp),就是Windows+Apache+MySQL+PHP 的網站搭建集成環境,即在Windows 下的Apache、MySQL 和PHP 的服務器軟件。在一臺服務器上的Apache 和MySQL 可以管理多個站點和數據庫,但要服務器同時兼容各種版本的PHP 程序代碼就顯得尤為費勁。同一服務器上多個不同的網站可能使用不同版本的PHP 語言和插件,在網站集成環境中單一的設置PHP 版本號,往往會影響個別站點的正常響應和界面顯示,造成站點無法訪問。本文重點在不使用虛擬主機的物理主機上通過對Wamp 文件改寫和特別配置,實現多個版本PHP、不同的CMS(網站內容管理系統)站點同時在線運行,解決服務器中已有低版本PHP 網站和新建高版本PHP 網站共存的問題。
單一CMS 管理下的網站群管理不涉及多版本PHP 問題,本文不做討論。本文中的網站群主要指同一主機中使用不同CMS 搭建、內容可以完全獨立的多個網站。為方便說明,本文使用兩個WordPress CMS,安裝在不同子目錄下,以子目錄區分不同站點,且分別啟用不同版本的PHP。本文中的虛機指的是WampServer 的一種多網站解析方式,不同于具有獨立操作系統的虛擬主機。本文涉及到的軟件版本號:
WampServer 3.1.7,Apache 2.4.37,MySQL 5.7.24,PHP 5.6.40 及以上,fcgid 2.3.10。
安裝Wamp 前,必須先安裝VC2012、VC2013、VC2015 幾個必要的運行庫。Wamp 安裝成功后,在右下角的系統托盤里右鍵點擊圖標在菜單里設置為中文界面,左鍵點擊,將服務“切換到在線狀態”(此操作是直接改寫Apache 的配置文件httpd.conf)。
Options+Indexes+FollowSymLinks+Multiviews+ExecCGI
AllowOverride all
#由原來的Require local 更改為Require all granted
Require all granted
再選擇“phpMyAdmin”進入MySQL 數據庫管理器(即登錄http://localhost/phpmyadmin/,可以在登錄時選擇MariaDB 數據庫,二者區別只在高版本MySQL 的使用有版權限制),初始賬號/密碼為:root/空。
新建網站群的管理員賬號webadmin,設置密碼webpassword。新建wordpress_one 數據庫和wordpress_two 數據庫(字符集與排序規則utf8mb4_unicode_ci),并在權限中將這兩個數據庫的權限賦予賬號webadmin,這兩個數據庫將分別用于下文中安裝的兩個網站。最后設置一下數據庫系統管理員root 的賬號密碼。
假設要建兩個域名分別為www.webone.com 和www.webtwo.com 的網站,將兩個WordPress 安裝包分別解壓放在Wamp 安裝子目錄“wamp64wwwwebone”和“wamp64wwwwebtwo”下,這兩個網站的數據庫分別對應wordpress_one 和wordpress_two。
在 服 務 器 本 地 以 類 似“http://localhost/www/web_one/wp-admin/setup-config.php”的方式分別安裝子站。安裝時需要輸入以下信息(填寫數據庫的界面是英文,之后可以選擇語言,可能出現錯誤提示“The site is experiencing technical difficulties”,刷新后繼續出現安裝畫面):
數據庫名:wordpress_one(網站www.webone.com 的數據庫);
用戶名:webadmin(網站群管理員賬號);
用戶密碼:webpassword(網站群管理員賬號的密碼);
安裝完成后,后臺自動將以上信息填入了Word-Press 配置文件wp-config.php 中。另一個網站以同樣的方式安裝。不同的CMS 有不同的安裝界面和配置文件,具體的安裝方式要參照其相應的安裝說明進行。
服務器上有多個網站時,需要Apache 建立網站域名和網站文件路徑對應關系。通過圖形界面配置可以自動對路徑“wamp64inapacheapache2.4.37confextra”下的httpd-vhosts.conf 文件添加相應內容。
如圖1 所示在虛機管理器的圖形界面(左鍵點擊面板的“Your”、“VirtualHost Management”,打開http://localhost/add_vhost.php)填寫網站www.webone.com 域名和網站目錄信息(注意路徑中是反斜杠),生成httpdvhosts.conf 文件,同時自動生成了本地hosts 文件的站點域名解析。另一個網站也做類似設置。

圖1 配置網站www.webone.com的虛機管理
這樣生成的文件配置里,只能本地訪問網站的。可以在執行以上操作前,修改路徑“wamp64www”下的文件add_vhost.php。
ServerName{$vh_name}
DocumentRoot"{$vh_folder}"
Options+Indexes+Includes+FollowSymLinks+MultiViews
AllowOverride All
#由原來的Require local 更改為Require all granted
Require all granted
此設置可以使虛機管理器在自動生成httpdvhosts.conf 文件時,直接填寫“Require all granted”語句而具有非本地訪問權限。如果不對此文件預先修改,則需要手動去將httpd-vhosts.conf 文件中的網站訪問權限改為“Require all granted”。
多站點實現多版本PHP 運行的核心方法是使用Apache 的mod_fcgid 模塊,mod_fcgid 模塊是Apache 的FastCGI 實現,在Apache 的2.4 以后的版本中得到支持。FastCGI 是語言無關的、可伸縮架構的CGI 開放擴展,其主要行為是讓CGI 解釋器進程常駐內存并接受FastCGI 進程管理器調度,因此獲得較高的性能。
下載fcgid 文件包mod_fcgid-2.3.10-win64-VS16.zip(下載地址https://www.apachelounge.com/download/),解壓后將其中的mod_fcgid.so 文件復制到服務器中Apache 模 塊 目 錄 里( 如 C:wamp64inapacheapache2.4.37modules)。然后在httpd.conf 文件中加載相應的模塊,添加語句LoadModule fcgid_module modules/mod_fcgid.so(最好和其他LoadModule 語句放在一起)。
引入fcgid 后,需要進一步對fcgid 的運行參數進行配置。左鍵點擊系統托盤中Wamp 的Apache 菜單,打開httpd.conf 文件(wamp64inapacheapache2.4.37conf),修改或添加以下內容:
#在下面的語句末尾添加“+ExecCGI”,允許該目錄下使用CGI 解釋器(也可以在httpd-vhosts.conf 文件的每個主機里單獨添加)
Options+Indexes+FollowSymLinks+Multiviews+ExecCGI
AllowOverride all
Require all granted
在以上模塊之后添加下面的模塊內容,保證在啟用fcgid 之后能正常登錄MySQL 數據庫。
Options+Indexes+FollowSymLinks+Multiviews+ExecCGI
AllowOverride all
Require all granted
在httpd.conf 文件末尾添加以下模塊的所有內容,確定執行fcgid 時的主要參數。
#添加映射將文件擴展名映射到指定的處理程序
AddHandler fcgid-script.fcgi.php
#設置PHP_FCGI_MAX_REQUESTS 大于或等于Fcgid-MaxRequestsPerProcess,防止php-cgi 進程在處理完所有請求前退出
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
#設置php-cgi 每個進程的最大請求數
FcgidMaxRequestsPerProcess 1000
#設置php-cgi 最大進程數
FcgidMaxProcesses 5
#設置fcgid 的通信超時時間
FcgidIOTimeout 120
#超時終止空閑fcgid 程序
FcgidIdleTimeout 120
#設置啟用fcgid 后上傳附件的大小值(單位是字節),如下16777216=16M
FcgidMaxRequestLen 16777216
#指定運行默認PHP 版本時的php.ini 配置文件所在的文件夾路徑
FcgidInitialEnv PHPRC "C:/wamp64/bin/apache/apache2.4.37/bin"
#指定默認PHP 版本,同wamp 面板中設置的PHP 版本保持一致
FcgidWrapper "C:/wamp64/bin/php/php5.6.40/php-cgi.exe" .
php
#指定可執行PHP 代碼的文件類型
AddType application/x-httpd-php.php
修改httpd-vhosts.conf 文件,針對具體的網站指定不同版本的PHP。打開路徑“wamp64inapacheapache2.4.37confextra”下的httpd-vhosts.conf 文件(即圖1 生成的配置文件),對網站www.webone.com 和www.webtwo.com 的配置信息做如下內容添加。
ServerName www.webone.com
DocumentRoot"c:/wamp64/www/webone"
#添加以下兩條語句,指明網站www.webone.com 運行php7.0.33 版本,
FcgidInitialEnv PHPRC"C:/wamp64/bin/php/php7.0.33"
FcgidWrapper "C:/wamp64/bin/php/php7.0.33/php-cgi.exe" .php
Options+Indexes+Includes+FollowSymLinks+MultiViews
AllowOverride All
Require all granted
#
ServerName www.webtwo.com
DocumentRoot"c:/wamp64/www/webtwo"
#添加以下兩條語句,指明網站www. webtwo.com 運行php7.3.1 版本
FcgidInitialEnv PHPRC"C:/wamp64/bin/php/php7.3.1"
FcgidWrapper "C:/wamp64/bin/php/php7.3.1/php- cgi.exe" .php
Options+Indexes+Includes+FollowSymLinks+MultiViews
AllowOverride All
Require all granted
這兩個網站指定了不同版本的PHP 解釋器,對各自的代碼和插件有不同的兼容性和特點。這里指定了PHP 較高的版本,如果這里不特別指明PHP 版本,則網站默認運行系統設置里指定的低版本PHP 5.6.40,以便適應較舊的網站。
相對于在服務器上啟用多個Web 服務器(例如Apache 和IIS)分別配置或以虛擬主機方式隔離網站主體的方式,本方法僅使用Apache 服務器并引入fcgid模塊來解決多網站的PHP 版本沖突問題,配置方式簡單且系統運行穩定,避免了多Web 服務器的干擾影響,也避免使用虛擬主機造成系統資源消耗過大。非常適合集團性企業的子分公司各門戶網站統一管理,也適合網站托管集成商有效提高云資源利用率。