Dot-Net

通過 HTTPS 的 IIS 503“服務不可用”,HTTP 工作正常

  • March 17, 2021

我有一個在 IIS 7.5 中執行的網站。當我通過 HTTP 訪問該站點時,一切正常。當我通過 HTTPS 執行站點時,我立即收到 HTTP 503 錯誤“服務不可用”。站點上使用的自生成/自簽名的 SSL 證書。

以下是我看到的適用於此場景的類似問題的解決方案:

  • 使用者身份已過時

    • 原因:在HTTP下成功執行的同一個App Pool與HTTPS一起使用
  • 應用程序池使用者的密碼已更改

    • 原因:在HTTP下成功執行的同一個App Pool與HTTPS一起使用
  • 將“載入使用者配置文件”設置為 false

    • 原因:這已設置為 false。同樣,在 HTTP 下成功執行的同一個 App Pool 與 HTTPS 一起使用
  • .NET 皇家

    • 原因:站點/.NET 已經通過 HTTP 成功執行,並且站點似乎永遠不會遇到 .NET 程式碼,因為 503 錯誤會立即返回,即使在 IIS 重置或 web.config 修改之後也是如此
  • 重新啟動 IIS

    • 原因:我試過這個
  • 重啟應用程序池

    • 原因:我試過這個
  • 站點 > 高級設置 > 啟用的協議 > http、https

    • 原因:我試過這個

此部落格上的評論者 Chad Cothern 給出了答案,並通過 BretB 連結到了此 Microsoft 部落格。在這種情況下,問題是埠 443 上的所有內容都已被保留,並且“阻止 W3SVC 在嘗試啟動站點時獲得偵聽埠 80 的權限。此外,在 IIS 中執行的應用程序不需要顯式保留即可執行,如果非 IIS 應用程序想要使用 HTTP 來偵聽請求,則它們必須保留 URL 命名空間。”

以下是確定這是否是問題以及如何解決的步驟:

  1. 打開命令提示符
  2. 跑:netsh http show urlacl url=https://+:443/
  3. 如果有什麼東西,那麼這就是你的問題。埠 443 已完全保留並阻止 IIS。
  • 如果需要為在 IIS 之外執行的應用程序保留 443 埠,則需要使用應用程序路徑註冊(即http://+:443/appPath
  • 如果那裡什麼都沒有,那麼這可能不是問題。無需繼續。
  1. 跑:netsh http delete urlacl https://+:443/
  2. 再次嘗試執行您的應用程序。

請注意,您還可以使用此方法檢查埠 80 或任何其他埠。例如,如果保留埠 80 而未保留埠 443,則通過 HTTPS 的站點可以工作,而 HTTP 則不能。

顯示上述命令和結果

引用自:https://stackoverflow.com/questions/50103814