服務器環境搭建系列 II - PHP在IIS6.0中部署

場景


需要在客戶服務器上進行項目部署實施:
  • 客戶提供的服務器只有Windows平臺;
  • 客戶可提供的二級域名有限,或無法提供二級域名;
  • 服務器所在網絡監管很嚴格,一般只開放80服務端口(如需開放其他端口則需要較長審批流程),無法通過VPN或FTP方式進行後期系統維護;
客戶服務器環境爲:
  • Windows 2003
  • IIS 6.0(.Net Frameworks 2.0+)
項目部署環境要求:
  • PHP 5.3.13
  • MySQL
  • 微博(記事狗)
  • 論壇(Discuz!)
解決方案

1.準備工作

    A. 通過Google搜索解決方案(得出參考文獻如後面所列)。
  • 2種可選方案 - ISAPI和FastCGI;
  • 最終選擇FastCGI - 由於文章中指出“ISAPI方式穩定性不佳,經常會導致整個Web Server Crash,所以微軟特別針對IIS開發了FastCGI模組(IIS7已內建),據說效能及穩定性都有較大改善”。
    B. 在本地搭建模擬部署實施環境 - IIS上搭建項目部署所需環境準備工作如下:
  • 下載 PHP 包( 使用 php-5.3.13-Win32-VC9-x86.zip 線程安全版 ) - 最好安裝於非系統盤,與項目系統處於同一文件夾且需是英文目錄路徑(暫時不考慮IO問題)。
  • 下載 FastCGI for IIS 包並安裝 - 默認安裝於 %windir%\system32\inetsrv 目錄下,包含fcgiext.dll、fcgiext.ini、fcgiconfig.js等幾個文件。
2.模擬環境搭建

    按照參考文章中所列,逐步修改相關配置。開始確實摸不着頭腦,實際上這幾個 ini 配置文件中對於其中配置條目都有相關說明,比如php.ini中對默認使用什麼值、建議在Windows平臺上打開或關閉配置項等,fcgiext.ini 中非常詳細地舉例說明了多種php處理方式。

2.1 PHP.ini 相關配置變更

1. 首先開啓『擴展目錄』配置項

然後修改 PHP.ini 配置文件中如下3個配置項(IIS 的輔助配置):
cgi.force_redirect = 0 cgi.fix_pathinfo=1 fastcgi.impersonate = 1

2. 同時,需要開啓MySQL相關配置(在如下圖所示配置節)
具體應該只開啓 MySQL 對應動態鏈接庫配置項


3. 需開啓下面設置項,以避免 Discuz! 出現 PHP 不能進行 script 解釋的問題。

4. 部署時需打開 log 相關選項(如下圖所示的 ini 配置節)
如下圖需打開『顯示啓動時錯誤信息』選項,一般按照 PHP.ini 文件配置相應說明進行對應修改即可。

 進入實際生產環境時需關閉 log 並開啓文件 log

5. PHP 按照上述配置後可以先放置 phpinfo.php 檢查 PHP運行環境是否 OK,如果提示有自動區域設置(Locale)問題,可以通過修改下圖所示配置項完成:
記得刪除 phpinfo.php

2.2 fcgiext.ini 配置文件變更

修改 fcgiext.ini 配置文件 - 指定fcigext.dll需要處理的IIS站點及相關配置

一般需指定 fcgiext.dll 對應處理的 IIS 站點編號(如下圖所示),避免客戶服務器環境多系統間影響。

並在 [Types] 中進行設定,其中:
php:823433=PHP ;小寫php爲指定處理.php後綴的url請求,冒號後面數字標識對應IIS站點編號,等號右邊的大寫PHP表示對應的具體處理節[PHP]
[PHP]節中定義對應用於FAST CGI方式的PHP環境,這個方括號[PHP]內的PHP可以自定義,只需與[Types]中描述對應即可。

此外,須將下面兩個時間設長些,因Discuz!中對 UCenter 的處理時間相當長(登錄大概要10多秒鐘):
RequestTimeout=50
ActivityTimeout=90

2.3 IIS 相關配置變更
這一步驟主要參考IIS6+PHP5 (FastCGI) 安裝攻略文章相關內容
假設PHP安裝路徑在 C:\PHP5,但從客戶服務器環境及系統更新維護角度講不建議這樣做。

對 C:\PHP5 目錄增加 IIS_WPG 羣組的讀取及執行權限。
(沒加這個就會跑出 FastCGI Error)

5. 加入系統環境變數 (讓 extension 及 php.ini 能順利被找到)。
Path=C:\PHP5;
PHPRC=C:\PHP5

6. 開啟 IIS 管理員,如下圖設定。

7. 增加預設首頁 index.php

8. 檢查網頁服務延伸。
(正常的話應該會有這一項,若沒有請自行加入 C:\WINDOWS\system32\inetsrv\fcgiext.dll)


主要需注意:
A. PHP.exe所在目錄的可執行權限設定 - 需注意保障客戶服務器安全,除非必要不要開啓 IIS_WPG 系統默認用戶組除了文件夾瀏覽、讀取、執行權限外其他任何權限,特別不能爲了簡單直接開啓系統的 Everyone 權限。
B. 儘量不使用fcgiext.js進行配置,而是直接修改fcgiext.ini配置文件 - 因爲客戶服務器有時會出於安全考慮關閉了本地cscript腳本的執行服務。


存在(遺留)問題

1. PHP 的文件 log 好像不能啓動;

2. PHP 相關優化配置工作沒有進行 - 數據庫緩存設置、進程內存使用大小限制、上傳文件限制等;

3. fcgiext 相關優化配置工作沒有進行;

4. 未進行壓力測試,需進一步對系統瓶頸進行考察 - 通過Google搜索或壓力測試


建議

1. 最好將 Discuz! 和 微博(記事狗)分別放置於不同的應用程序池 - 如BBS和Weibo,以避免同一個w3wp.exe進程內執行的相互影響。
2. 最好將各站點除.php外地其他所有對應處理擴展都刪除。
3. 將 IIS 相關優化整理出來。


參考

  1. IIS6+PHP5 (FastCGI) 安裝攻略 -  http://blog.linym.net/archives/264
  2. IIS6+PHP5(ISAPI)安裝攻略 -  http://blog.linym.net/archives/240
  3. PHP 配置相關鏈接

工具




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