IIS7.0通過FastCGI方式運行PHP遇到的一些問題及解決方法

經過二天的努力,終於把PHP網站從Apache遷移到IIS7上面,遷移過程中遇到一些問題,在這裏和大家分享一下。 至今仍有一個問題,希望大家幫忙指點。
本文不會涉及如下內容:
  1. IIS7的安裝
  2. FastCGI For IIS7.0的安裝和配置
  3. UrlScan的安裝和配置
  4. 如何配置IIS7.0來運行PHP    
  5. 爲什麼要把PHP網站從Apache遷移到IIS7上面
 
如果您想了解上面的內容,你可以到http://www.iis.nethttp://www.php.net網站查看相關內容,在搜索引擎中也能找到很多參考資料。
 
在IIS7.0上以FastCGI方式配置好PHP運行環境,測試可以正常運行PHP程序後,將PHP程序部署上去,導入程序原來的數據和配置信息。由於Apache服務器在佔用80端口,所以先停止Apache並設置IIS7.0使用80端口運行網站。 PHP程序終於在IIS7.0上跑起來了,看起來還不錯,哈哈……
 
不過好像高興的太早,很快就有問題出來啦L
 
一、某些圖片無法顯示
我的同事發現有不少圖片無法顯示。我感覺很奇怪,既然在Apache上沒有問題,遷移到IIS7.0後,域名和文件路徑均沒有變化,不應該出現問題呀。我馬上開始確認和排查問題,首先,根據同事的提供信息查看頁面,果然很多圖片無法顯示;然後,我就隨機看了網站中的圖片,發現有些圖片可以正常顯示,而且不能正常顯示的圖片,都是路徑中包含了日文或中文字符,這是爲什麼呢???
 
瘋狂的折騰了一通之後,還是沒有頭緒,沒有辦法只能重新再瀏覽器中打開一張圖片,希望可以從錯誤信息中找到一些有用的東西,只有404 File Not Found錯誤,沒有其他有價值的參考信息。這時候我遠程連接到服務器,在服務器上訪問,哈哈……錯誤信息就比較詳細了,如下圖:
 
OMG,是UrlScan拒絕了該請求,在UrlScan的日誌目錄C:\Windows\System32\inetsrv\urlscan\logs\中打開一個日誌文件,發現很多類似 "Rejected URL+contains+high+bit+character URL"的記錄,這又是爲什麼呢???原來IIS7.0上安裝UrlScan後,所有的請求都會經過aspnet_filter和Request Filtering的過濾,Request Filtering的過濾規則就在UrlScan的安裝目錄C:\Windows\System32\inetsrv\urlscan\UrlScan.ini文件中,其中有這樣一個規則AllowHighBitCharacters=0,IIS官網的解釋是: This feature either allows or rejects all requests to IIS 7 that contain non-ASCII characters and logs the error code 404.12,允許或拒絕所有包含非ASCII字符的請求並在日誌中記錄404.12錯誤,該規則默認爲0,也就拒絕包含高位字符的請求 URL我們將AllowHighBitCharacters的值改爲1,圖片終於可以正常顯示了。
 
關於AllowHighBitCharacters的配置,UrlScan.ini中配置的規則是整個機器級別的,IIS7.0上的所有網站都適用。根據IIS官網的說明,還可以在網站級別配置。在IIS管理器中,你可以在左側選擇指定的網站後,在中間的功能區域選擇"Request Filtering",雙擊該功能,在右側的操作區域中點擊"Edit Feature Settings"後,選中或者取消"allow high-bit characters"項即可;也可以直接在網站的web.config中添加如下內容:
但是,根據我的測試,如果在UrlScan.ini中配置AllowHighBitCharacters=0,那麼在網站級別按照上面在web.config中配置AllowHighBitCharacters="true",根本就不起作用,IIS7.0依然拒絕處理路徑中含有非ASCII字符的請求;如果在UrlScan.ini中配置AllowHighBitCharacters=1,那麼在網站級別按照上面在web.config中配置AllowHighBitCharacters="true|false"就會起作用。
這又是爲什麼呢?希望有高手指點一下。
二、很多基於JQuery的功能失效了
日期選擇框失效了,彈出層失效了,輸入驗證失效了……可是,這又是爲什麼呢?
 
還好吃一塹長一智,這次直接去看UrlScan的日誌,發現加載JS的記錄很多都是" Rejected URL+contains+dot+in+path URL",然後就去看UrlScan.ini中的配置,在AllowHighBitCharacters下面有一個AllowDotInPath的配置,默認值也是0,也就是不允許在Url中出現除了擴展名之外的點字符[.],大家知道JQuery庫和很多擴展插件的文件名稱中都有點字符[.],將AllowDotInPath的值修改爲1,打開網站就沒有問題了,哈哈:)
注意:UrlScan.ini中關於AllowDotInPath的說明,除了測試外不建議將其設置爲1,因爲如果設置1,基於擴展名的檢查將不在可信。
 
這二個問題解決後,從Apache遷移PHP程序到IIS7.0也算完成了。
 
最後,還有一個問題,就是我們的php網站在IIS7.0上運行,訪問的時候,偶爾會有頁面空白的情況發生,等一段時間就好了,直接回收或者重啓進程池後也會好,不知道是什麼問題?希望有了解此問題的朋友,不吝賜教,給些指點,先在此謝過!
最後這個問題已經解決。通過增大IIS應用程序池中的連接數,減小連接時間後解決。
 
參考:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章