在 Windows 10 Pro 上托管,而不是在服务器上。
我正在尝试使用主机提供的外部静态 IP 共享本地 IIS 网站。当我使用http://localhost访问网站时,它工作正常,但如果我尝试使用 IP 打开它,我总是会看到一个错误页面,上面写着“无法访问网站”。
- 我可以从任何计算机ping IP。
- 我可以启动 Apache 服务器,从外部可以看到它。
- 此网站的 IIS 绑定设置为端口 80 的“全部未分配”和端口 443 的“全部未分配”。
- 防火墙和防病毒软件暂时禁用
- 文件夹“inetpub”为管理员、非托管池用户、DefaultAppPool、用户、系统、网络服务提供完全控制权限。
- 这是一个 .NET Core 应用程序,因此它从 localhost:5000 开始,IIS 只是将所有请求重定向到它。
- 尝试使用“netsh”删除所有 ACL 规则,然后添加规则以允许所有用户访问“http://*:80/”
为什么 Apache 在任何地方都能正常工作,但 IIS 只能在 localhost 上使用?
解决了 :)
在评论中讨论后,我意识到我需要先尝试共享 Kestrel 服务器,该服务器通常默认在 localhost:5000 启动。此时,为简单起见,必须跳过 IIS。本文介绍了如何让 Kestrel 监听特定端口上的传入请求。
https://weblog.west-wind.com/posts/2016/sep/28/external-network-access-to-kestrel-and-iis-express-in-aspnet-core
https://www.google.com/search?q=run+kestrel+on+specific+ip
具体来说,appsettings.json 应该包含要调用的端点。此端点应该是 0.0.0.0 或要监听的特定 IP。
https://stackoverflow.com/a/55806584/437393
或者 Program.cs 应该调用方法 UseUrls()
此时,直接使用命令“dotnet MyProject.dll”启动 Kestrel 应该可以使网站在静态 IP 和端口 5000 上可见,例如 xxx.xxx.xxx.xxx:5000
现在,回到 IIS。
默认情况下,Windows 10 将所有主机名解析为 IPv6,因此要使 IIS 侦听 IPv4,必须执行此命令。
https://stackoverflow.com/questions/14029629/iis-cant-access-page-by-ip-address-instead-of-localhost
https://stackoverflow.com/questions/34212765/how-do-i-get-the-kestrel-web-server-to-listen-to-non-localhost-requests