柏建明,劉斌文,董銀麟
(中色(寧夏)東方集團(tuán)有限公司,石嘴山753000)
WampServer(簡稱Wamp),就是Windows+Apache+MySQL+PHP 的網(wǎng)站搭建集成環(huán)境,即在Windows 下的Apache、MySQL 和PHP 的服務(wù)器軟件。在一臺服務(wù)器上的Apache 和MySQL 可以管理多個站點(diǎn)和數(shù)據(jù)庫,但要服務(wù)器同時(shí)兼容各種版本的PHP 程序代碼就顯得尤為費(fèi)勁。同一服務(wù)器上多個不同的網(wǎng)站可能使用不同版本的PHP 語言和插件,在網(wǎng)站集成環(huán)境中單一的設(shè)置PHP 版本號,往往會影響個別站點(diǎn)的正常響應(yīng)和界面顯示,造成站點(diǎn)無法訪問。本文重點(diǎn)在不使用虛擬主機(jī)的物理主機(jī)上通過對Wamp 文件改寫和特別配置,實(shí)現(xiàn)多個版本PHP、不同的CMS(網(wǎng)站內(nèi)容管理系統(tǒng))站點(diǎn)同時(shí)在線運(yùn)行,解決服務(wù)器中已有低版本PHP 網(wǎng)站和新建高版本PHP 網(wǎng)站共存的問題。
單一CMS 管理下的網(wǎng)站群管理不涉及多版本PHP 問題,本文不做討論。本文中的網(wǎng)站群主要指同一主機(jī)中使用不同CMS 搭建、內(nèi)容可以完全獨(dú)立的多個網(wǎng)站。為方便說明,本文使用兩個WordPress CMS,安裝在不同子目錄下,以子目錄區(qū)分不同站點(diǎn),且分別啟用不同版本的PHP。本文中的虛機(jī)指的是WampServer 的一種多網(wǎng)站解析方式,不同于具有獨(dú)立操作系統(tǒng)的虛擬主機(jī)。本文涉及到的軟件版本號:
WampServer 3.1.7,Apache 2.4.37,MySQL 5.7.24,PHP 5.6.40 及以上,fcgid 2.3.10。
安裝Wamp 前,必須先安裝VC2012、VC2013、VC2015 幾個必要的運(yùn)行庫。Wamp 安裝成功后,在右下角的系統(tǒng)托盤里右鍵點(diǎn)擊圖標(biāo)在菜單里設(shè)置為中文界面,左鍵點(diǎn)擊,將服務(wù)“切換到在線狀態(tài)”(此操作是直接改寫Apache 的配置文件httpd.conf)。
Options+Indexes+FollowSymLinks+Multiviews+ExecCGI
AllowOverride all
#由原來的Require local 更改為Require all granted
Require all granted
再選擇“phpMyAdmin”進(jìn)入MySQL 數(shù)據(jù)庫管理器(即登錄http://localhost/phpmyadmin/,可以在登錄時(shí)選擇MariaDB 數(shù)據(jù)庫,二者區(qū)別只在高版本MySQL 的使用有版權(quán)限制),初始賬號/密碼為:root/空。
新建網(wǎng)站群的管理員賬號webadmin,設(shè)置密碼webpassword。新建wordpress_one 數(shù)據(jù)庫和wordpress_two 數(shù)據(jù)庫(字符集與排序規(guī)則utf8mb4_unicode_ci),并在權(quán)限中將這兩個數(shù)據(jù)庫的權(quán)限賦予賬號webadmin,這兩個數(shù)據(jù)庫將分別用于下文中安裝的兩個網(wǎng)站。最后設(shè)置一下數(shù)據(jù)庫系統(tǒng)管理員root 的賬號密碼。
假設(shè)要建兩個域名分別為www.webone.com 和www.webtwo.com 的網(wǎng)站,將兩個WordPress 安裝包分別解壓放在Wamp 安裝子目錄“wamp64wwwwebone”和“wamp64wwwwebtwo”下,這兩個網(wǎng)站的數(shù)據(jù)庫分別對應(yīng)wordpress_one 和wordpress_two。
在 服 務(wù) 器 本 地 以 類 似“http://localhost/www/web_one/wp-admin/setup-config.php”的方式分別安裝子站。安裝時(shí)需要輸入以下信息(填寫數(shù)據(jù)庫的界面是英文,之后可以選擇語言,可能出現(xiàn)錯誤提示“The site is experiencing technical difficulties”,刷新后繼續(xù)出現(xiàn)安裝畫面):
數(shù)據(jù)庫名:wordpress_one(網(wǎng)站www.webone.com 的數(shù)據(jù)庫);
用戶名:webadmin(網(wǎng)站群管理員賬號);
用戶密碼:webpassword(網(wǎng)站群管理員賬號的密碼);
安裝完成后,后臺自動將以上信息填入了Word-Press 配置文件wp-config.php 中。另一個網(wǎng)站以同樣的方式安裝。不同的CMS 有不同的安裝界面和配置文件,具體的安裝方式要參照其相應(yīng)的安裝說明進(jìn)行。
服務(wù)器上有多個網(wǎng)站時(shí),需要Apache 建立網(wǎng)站域名和網(wǎng)站文件路徑對應(yīng)關(guān)系。通過圖形界面配置可以自動對路徑“wamp64inapacheapache2.4.37confextra”下的httpd-vhosts.conf 文件添加相應(yīng)內(nèi)容。
如圖1 所示在虛機(jī)管理器的圖形界面(左鍵點(diǎn)擊面板的“Your”、“VirtualHost Management”,打開http://localhost/add_vhost.php)填寫網(wǎng)站www.webone.com 域名和網(wǎng)站目錄信息(注意路徑中是反斜杠),生成httpdvhosts.conf 文件,同時(shí)自動生成了本地hosts 文件的站點(diǎn)域名解析。另一個網(wǎng)站也做類似設(shè)置。
圖1 配置網(wǎng)站www.webone.com的虛機(jī)管理
這樣生成的文件配置里,只能本地訪問網(wǎng)站的。可以在執(zhí)行以上操作前,修改路徑“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
此設(shè)置可以使虛機(jī)管理器在自動生成httpdvhosts.conf 文件時(shí),直接填寫“Require all granted”語句而具有非本地訪問權(quán)限。如果不對此文件預(yù)先修改,則需要手動去將httpd-vhosts.conf 文件中的網(wǎng)站訪問權(quán)限改為“Require all granted”。
多站點(diǎn)實(shí)現(xiàn)多版本PHP 運(yùn)行的核心方法是使用Apache 的mod_fcgid 模塊,mod_fcgid 模塊是Apache 的FastCGI 實(shí)現(xiàn),在Apache 的2.4 以后的版本中得到支持。FastCGI 是語言無關(guān)的、可伸縮架構(gòu)的CGI 開放擴(kuò)展,其主要行為是讓CGI 解釋器進(jìn)程常駐內(nèi)存并接受FastCGI 進(jìn)程管理器調(diào)度,因此獲得較高的性能。
下載fcgid 文件包mod_fcgid-2.3.10-win64-VS16.zip(下載地址https://www.apachelounge.com/download/),解壓后將其中的mod_fcgid.so 文件復(fù)制到服務(wù)器中Apache 模 塊 目 錄 里( 如 C:wamp64inapacheapache2.4.37modules)。然后在httpd.conf 文件中加載相應(yīng)的模塊,添加語句LoadModule fcgid_module modules/mod_fcgid.so(最好和其他LoadModule 語句放在一起)。
引入fcgid 后,需要進(jìn)一步對fcgid 的運(yùn)行參數(shù)進(jìn)行配置。左鍵點(diǎn)擊系統(tǒng)托盤中Wamp 的Apache 菜單,打開httpd.conf 文件(wamp64inapacheapache2.4.37conf),修改或添加以下內(nèi)容:
#在下面的語句末尾添加“+ExecCGI”,允許該目錄下使用CGI 解釋器(也可以在httpd-vhosts.conf 文件的每個主機(jī)里單獨(dú)添加)
Options+Indexes+FollowSymLinks+Multiviews+ExecCGI
AllowOverride all
Require all granted
在以上模塊之后添加下面的模塊內(nèi)容,保證在啟用fcgid 之后能正常登錄MySQL 數(shù)據(jù)庫。
Options+Indexes+FollowSymLinks+Multiviews+ExecCGI
AllowOverride all
Require all granted
在httpd.conf 文件末尾添加以下模塊的所有內(nèi)容,確定執(zhí)行fcgid 時(shí)的主要參數(shù)。
#添加映射將文件擴(kuò)展名映射到指定的處理程序
AddHandler fcgid-script.fcgi.php
#設(shè)置PHP_FCGI_MAX_REQUESTS 大于或等于Fcgid-MaxRequestsPerProcess,防止php-cgi 進(jìn)程在處理完所有請求前退出
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
#設(shè)置php-cgi 每個進(jìn)程的最大請求數(shù)
FcgidMaxRequestsPerProcess 1000
#設(shè)置php-cgi 最大進(jìn)程數(shù)
FcgidMaxProcesses 5
#設(shè)置fcgid 的通信超時(shí)時(shí)間
FcgidIOTimeout 120
#超時(shí)終止空閑fcgid 程序
FcgidIdleTimeout 120
#設(shè)置啟用fcgid 后上傳附件的大小值(單位是字節(jié)),如下16777216=16M
FcgidMaxRequestLen 16777216
#指定運(yùn)行默認(rèn)PHP 版本時(shí)的php.ini 配置文件所在的文件夾路徑
FcgidInitialEnv PHPRC "C:/wamp64/bin/apache/apache2.4.37/bin"
#指定默認(rèn)PHP 版本,同wamp 面板中設(shè)置的PHP 版本保持一致
FcgidWrapper "C:/wamp64/bin/php/php5.6.40/php-cgi.exe" .
php
#指定可執(zhí)行PHP 代碼的文件類型
AddType application/x-httpd-php.php
修改httpd-vhosts.conf 文件,針對具體的網(wǎng)站指定不同版本的PHP。打開路徑“wamp64inapacheapache2.4.37confextra”下的httpd-vhosts.conf 文件(即圖1 生成的配置文件),對網(wǎng)站www.webone.com 和www.webtwo.com 的配置信息做如下內(nèi)容添加。
ServerName www.webone.com
DocumentRoot"c:/wamp64/www/webone"
#添加以下兩條語句,指明網(wǎng)站www.webone.com 運(yùn)行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"
#添加以下兩條語句,指明網(wǎng)站www. webtwo.com 運(yùn)行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
這兩個網(wǎng)站指定了不同版本的PHP 解釋器,對各自的代碼和插件有不同的兼容性和特點(diǎn)。這里指定了PHP 較高的版本,如果這里不特別指明PHP 版本,則網(wǎng)站默認(rèn)運(yùn)行系統(tǒng)設(shè)置里指定的低版本PHP 5.6.40,以便適應(yīng)較舊的網(wǎng)站。
相對于在服務(wù)器上啟用多個Web 服務(wù)器(例如Apache 和IIS)分別配置或以虛擬主機(jī)方式隔離網(wǎng)站主體的方式,本方法僅使用Apache 服務(wù)器并引入fcgid模塊來解決多網(wǎng)站的PHP 版本沖突問題,配置方式簡單且系統(tǒng)運(yùn)行穩(wěn)定,避免了多Web 服務(wù)器的干擾影響,也避免使用虛擬主機(jī)造成系統(tǒng)資源消耗過大。非常適合集團(tuán)性企業(yè)的子分公司各門戶網(wǎng)站統(tǒng)一管理,也適合網(wǎng)站托管集成商有效提高云資源利用率。