无法在 VPS 托管上远程访问 IIS

无法在 VPS 托管上远程访问 IIS

在 Windows 10 Pro 上托管,而不是在服务器上。

我正在尝试使用托管商提供的外部静态 IP 共享本地 IIS 网站。当我使用http://本地主机它运行良好,但如果我尝试使用 IP 打开它,我总是会看到一个错误页面,提示“无法访问网站”。

  1. 我可以从任何计算机 ping IP。
  2. 我可以启动 Apache 服务器,并且从外部可以看到它。
  3. 该网站的 IIS 绑定将端口 80 设置为“全部未分配”,将端口 443 设置为“全部未分配”。
  4. 防火墙和防病毒软件暂时禁用
  5. 文件夹“inetpub”为管理员、非托管池用户、DefaultAppPool、用户、系统、网络服务提供完全控制权限。
  6. 这是一个 .NET Core 应用程序,因此它从 localhost:5000 启动,并且 IIS 只是将所有请求重定向到它。
  7. 尝试使用“netsh”删除所有 ACL 规则,然后添加规则以允许所有用户访问“http://*:80/”

为什么 Apache 在任何地方都可以正常工作,但 IIS 只能在本地主机上使用?

答案1

解决了 :)

在评论中讨论后,我意识到我需要先尝试共享通常默认在 localhost:5000 启动的 Kestrel 服务器。此时,为了简单起见,必须跳过 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

"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

https://stackoverflow.com/questions/34212765/how-do-i-get-the-kestrel-web-server-to-listen-to-non-localhost-requests

netsh http add iplisten xxx.xxx.xxx.xxx    // Static IP

相关内容