在 Windows 10 Pro 上托管,而不是在服务器上。
我正在尝试使用托管商提供的外部静态 IP 共享本地 IIS 网站。当我使用http://本地主机它运行良好,但如果我尝试使用 IP 打开它,我总是会看到一个错误页面,提示“无法访问网站”。
- 我可以从任何计算机 ping IP。
- 我可以启动 Apache 服务器,并且从外部可以看到它。
- 该网站的 IIS 绑定将端口 80 设置为“全部未分配”,将端口 443 设置为“全部未分配”。
- 防火墙和防病毒软件暂时禁用
- 文件夹“inetpub”为管理员、非托管池用户、DefaultAppPool、用户、系统、网络服务提供完全控制权限。
- 这是一个 .NET Core 应用程序,因此它从 localhost:5000 启动,并且 IIS 只是将所有请求重定向到它。
- 尝试使用“netsh”删除所有 ACL 规则,然后添加规则以允许所有用户访问“http://*:80/”
为什么 Apache 在任何地方都可以正常工作,但 IIS 只能在本地主机上使用?
答案1
解决了 :)
在评论中讨论后,我意识到我需要先尝试共享通常默认在 localhost:5000 启动的 Kestrel 服务器。此时,为了简单起见,必须跳过 IIS。本文介绍如何让 Kestrel 监听特定端口上的传入请求。
https://www.google.com/search?q=run+kestrel+on+specific+ip
具体来说,appsettings.json 应包含要调用的端点。此端点应为 0.0.0.0 或要监听的特定 IP。
https://stackoverflow.com/a/55806584/437393
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://0.0.0.0:5000"
}
}
}
或者 Program.cs 应该调用方法 UseUrls()
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseUrls("http://0.0.0.0:5000/")
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
此时,使用命令“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
netsh http add iplisten xxx.xxx.xxx.xxx // Static IP