.net - 通过 HTTPS 的 IIS 503“服务不可用”,HTTP 工作正常
问题描述
我有一个在 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 命名空间。”
以下是确定这是否是问题以及如何解决的步骤:
- 打开命令提示符
- 跑:
netsh http show urlacl url=https://+:443/
- 如果有什么东西,那么这就是你的问题。端口 443 已完全保留并阻止 IIS。
- 如果需要为在 IIS 之外运行的应用程序保留 443 端口,则需要使用应用程序路径注册(即http://+:443/appPath)
- 如果那里什么都没有,那么这可能不是问题。无需继续。
- 跑:
netsh http delete urlacl https://+:443/
- 再次尝试运行您的应用程序。
请注意,您还可以使用此方法检查端口 80 或任何其他端口。例如,如果保留端口 80 而未保留端口 443,则通过 HTTPS 的站点可以工作,而 HTTP 则不能。
推荐阅读
- javascript - How are hexadecimal numbers created in JS?
- scala - 如何使用 http4s 处理基本的表单提交?
- python - Why does subclassing in Python slow things down so much?
- django - Django Forms: How to create a simple dropdown list in a form using values from an existing model
- php - Uncaught PDOException: SQLSTATE[42S02]: Base table or view not found: 1109 Unknown table 'users' in information_schema
- c++ - std::sort 在共享指针向量上
- .net - 如何在 Azure 逻辑应用中使用 Liquid 模板添加时间?
- vue.js - 背景属性在 Vue.js 中不起作用
- aws-lambda - How to access aws resources created in other account
- python - 收到错误:行包含空值,不确定原因