IIS服務在阿裡雲NAS上的最佳實踐
在我們的上一篇系列文章《Windows IIS服務挂載NAS共享檔案存儲》中,我們詳細介紹了如何利用阿裡雲檔案存儲(NAS)服務作為共享存儲的後端搭建Windows IIS伺服器提供Web和FTP服務。
當使用者使用了文中介紹的設定方法之後,在使用IIS服務時還是可能會碰到這樣或者那樣的問題。本文我們就将着重介紹一下IIS服務在NAS上使用時會碰到的一些常見問題以及解決方法,為使用者提供IIS上雲的最佳實踐。
1. 請使用SMB檔案卷
SMB是微軟力推的遠端檔案共享協定,與Windows是完全相容的。而來自Linux/Unix開源世界的NFS與Windows的相容性是難以保證的。為了避免協定相容性産生的相關問題,我們建議Windows使用者将IIS服務搭建在SMB檔案卷上。
2. 怎樣讓IIS服務更快更順暢
如果使用者在使用IIS服務時感覺速度慢,可以嘗試以下幾種加速方式:
2.1. 如果連接配接速度極慢
如果連接配接的速度非常慢,比如KB/s量級,請檢視是否有以下問題:
2.1.1. NFS和SMB用戶端發生沖突
檢視用戶端虛拟機上的這個系統資料庫項:
[HKLM\System\CurrentControlSet\Control\NetworkProvider\Order\ProviderOrder]
,檢查有沒有Nfsnp和Webclient。如果有,請去掉後重新開機用戶端機器。

圖1:[HKLM\System\CurrentControlSet\Control\NetworkProvider\Order\ProviderOrder],檢查有沒有Nfsnp和Webclient
2.1.2. DNS問題
Ping挂載位址看是否能通,或者延時是否正常。如果延時較長,請嘗試Ping挂載IP,如果Ping IP延時比Ping挂載位址的延時小很多,可能是DNS問題。(如果嘗試直接挂載IP位址延時沒有問題,那麼可以确信是DNS問題,需要盡快解決DNS問題。産品化一定要使用DNS挂載)
2.2. 優化系統資料庫
由于IIS使用SMB檔案卷的方式通路一個檔案時,IIS背景會有多次通路SMB檔案卷的操作,每次通路的時間不長,但是多次的疊加可能會造成用戶端總時間比較長。改進的方式可以參考附錄《Performance tuning for file server clients》将其中提到的三個系統資料庫項都調大,比如600, 或者更大。需要注意的是這些系統資料庫項都在系統資料庫
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters]
之下,分别是
- FileInfoCacheLifetime
- FileNotFoundCacheLifetime
- DirectoryCacheLifetime
說明:如果找不到以上三個系統資料庫項,請按照 Windows 的字段格式要求進行建立。
另外IIS自身也有若幹系統資料庫可以調整,詳情請參見《Tuning IIS》。
2.3. 浏覽器建議使用Chrome,不用IE
浏覽器的差別相信不用多做介紹了。Chrome浏覽器或者基于谷歌浏覽器核心的浏覽器速度都會更快一些的。
3. 常見錯誤及解法
3.1. HTTP錯誤500.19:無法通路請求的頁面,因為該頁的相關配置資料無效。錯誤碼0x80070003
圖2:HTTP錯誤500.19:無法通路請求的頁面,因為該頁的相關配置資料無效。錯誤碼0x80070003
解法在IIS管理器右邊欄的 編輯網站->基本配置 中把實體路徑改為UNC路徑(\\sharename.nas.aliyuncs.com\myshare),不能用盤符路徑。
3.2. Windows 2016: HTTP錯誤500.19。無法通路請求的頁面,因為該頁的相關配置資料無效。錯誤碼0x800704F8
圖3:Windows 2016: HTTP錯誤500.19。無法通路請求的頁面,因為該頁的相關配置資料無效。錯誤碼0x800704F8
Windows 2016需要修改系統資料庫
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters\AllowInsecureGuestAuth]
使用者打開系統資料庫編輯器之後需要找到
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters]
, 然後用右鍵選取建立DWORD(32位)值。
《Windows IIS服務挂載NAS共享檔案存儲》文章中有提及。
3.3. Windows 2016:HTTP錯誤500.19。無法通路請求的頁面,因為該頁的相關配置資料無效。錯誤碼0x8007003a
圖4:Windows 2016: HTTP錯誤500.19。無法通路請求的頁面,因為該頁的相關配置資料無效。錯誤碼0x8007003a
Windows 2016需要在IIS管理器->基本設定->連接配接為中設定一個特定使用者來通路網站檔案,不能直接用Administrator。客戶可以用《Windows IIS服務挂載NAS共享檔案存儲》中提到的辦法建立iis_user作為特定使用者通路檔案。
3.4. 沒有寫通路權限
圖5:沒有寫通路權限
需要在“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files”目錄中給連接配接身份(比如iis_user)讀寫權限。否則權限不足無法緩存檔案到本地。
3.5. HTTP錯誤500.19 無法通路請求的頁面,錯誤碼0x80070043
圖6:HTTP錯誤500.19。無法通路請求的頁面,錯誤碼0x80070043
這種情況是因為連接配接遠端路徑發生驗證錯誤。在IIS管理器點選左側的網站選擇出問題的網站,點選IIS管理器右側的檢視虛拟目錄,點選測試設定,即可看到測試連接配接的授權失敗。需要确定連接配接所使用的使用者名密碼是正确的。
圖7:點選IIS管理器右側的檢視虛拟目錄,點選測試設定,即可看到測試連接配接的授權失敗
3.6. 未能加載檔案或程式集“Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一個依賴項。指定的伺服器無法運作請求的操作。 (異常來自 HRESULT:0x8007003A)
圖8:Windows Server 2016未能加載檔案或程式集
這是Windows Server 2016的一個已知問題(見《Windows Server 2016加載dll錯誤》),當IIS挂載檔案卷時使用本地使用者而不是域使用者時,加載檔案卷裡的dll會出現錯誤。推薦方法是使用Windows Server 2012,或者給Windows Server 2016虛拟機安裝Active Directory功能生成一個AD域,就可以解決這個dll加載失敗的問題。具體解法詳見《通過安裝和配置AD域解決Windows Server 2016的IIS無法運作SMB檔案卷檔案的問題》。