一次驚心動魄的網站故障排查任務。

接獲呼救訊息,SharePoint 在例行安裝更新後,網站回傳錯誤徹底癱瘓 (打個疫苗人就掛了,這誰能接受啦),回傳訊息只有 HTTP 500,網頁內容、事件檢視器、ULS Log 沒有半點線索,多方搶救數小時仍無起色,徵召射茶包老人馳援。

我對 SharePoint 沒啥研究,全靠著多年 IIS / ASP.NET 開發經驗及問題排查直覺行事。我的目標很明確,當務之急是蒐集更多線索,HTTP 500 誰都知道是伺服器端出錯,除此之外啥都沒說,是要拎杯通靈逆?像個病人嚷著他快不行了,問身體哪裡不舒服卻笑而不語:「你猜」,我只想請他快點投胎。

SharePoint 對 ASP.NET / IIS 機制進行眾多深度調整,掛了一堆 Module、Handler,猜想這是錯誤訊被徹底吃掉的原因,試了改 <customError mode="Off" /><compilation debug="true" /> 無效,但我沒放棄,深信找出詳細錯誤訊息是解掉問題唯一的路,爬文學到新招 - IIS 有個我沒用過的功能 - 「失敗要求的追蹤規則」(註:前題為要安裝 Internet Information Services / World Wide Web 服務 / 狀況與診斷 / 追蹤」,我本機的 IIS 就沒裝)

設定啟用,指定 Log 路徑,新增要攔截的程式類別及狀態碼:

終於,啟用後在指定 Log 目錄下可看到詳細錯誤訊息的 XML 檔,從中取得價值連城的關鍵線索:

- SET_RESPONSE_ERROR_DESCRIPTION
  ErrorDesciption: 找不到模組 "SPRequestFilterModule"
- MODULE_SET_RESPONSE_ERROR_STATUS
  ModuleName: IIS Web Core
  Notification: BEGIN_REDIRECT
  HttpStatus: 500
  HttpReason: Internal Server Error
  HttpSubStatus: 0
  ErrorCode: 系統找不到指定的檔案 (0x80070002)

加入 SPRequestFilterModule 關鍵字爬文,很快找到微軟 Senior Escalation Engineer (問題升級工程師,第一線支援失敗時的救援部隊,算是微軟的茶包射手團或鬼殺隊吧) Stefan Goßner 有篇文章:Trending Issue: Module “SPRequestFilterModule” could not be found after September/October 2023 CU,其中提到幾乎一模一樣的狀況及處理手法,都安裝更新後 SPS 遇到 500 錯誤,靠「失敗要求的追蹤規則」得知錯誤原因。問題根源在於 System32\Inetsrv\config\applicationHost.config 不知何故少了一條必要的 SPRequestFilterModule Module 設定:

<globalModules>
   ...
   <add name="SPNativeRequestModule" image="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\isapi\spnativerequestmodule.dll" />
   <!-- 問題主機的下面這條不見了 -->
   <add name="SPRequestFilterModule" image="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\isapi\sprequestfilteringmodule.dll" preCondition="integratedMode,bitness64" />
</globalModules>

補上設定,輸入網址,瀏覽器終於緩緩吐出熟悉的 SharePoint 畫面,現場歡聲雷動,像是剪對了炸彈導線,危機解除~

記下本次兩支可疑更新的代碼供有緣人參考:KB5002840 (wssloc2016-kb5002840-fullfile-x64-glb.exe)、KB5002841 (sts2016-kb5002841-fullfile-x64-glb.exe)


Comments

Be the first to post a comment

Post a comment