在 windows 上将 ngrok 与 IISExpress 结合使用

Using ngrok with IISExpress on windows

我习惯使用 Mac,ngrok 是轻而易举的事;您需要做的就是指定一个端口,但我是 IISExpress 的新手,我不知道如何正确使用 ngrok and/or IIS。需要明确的是,我从一位同事(已离开公司)那里继承了一台 Windows 机器,并且该设置在本地运行良好。

本地url类似于:

thing.somedomain.com

在 IIS 的绑定部分,我有:

Type    Host Name               Port   IP Address
http    thing.somedomain.com    80     *

我使用此页面作为参考:https://www.twilio.com/blog/2014/03/configure-windows-for-local-webhook-testing-using-ngrok.html

这些说明看起来很合理,但对我不起作用。这些说明表明需要为 IIS 更改文件 applicationhost.config。我找到了这个文件,并找到了我需要 ngrok 的网站的正确部分。绑定信息与 IIS gui 中的内容不匹配:

<binding protocol="http" bindingInformation="*:4085:localhost" />

根据说明,我添加了:

<binding protocol="http" bindingInformation="*:4085:whatever.ngrok.io" />

(这里每次我在 windows 上 运行 ngrok 我得到 ngrok.io 而不是 ngrok.com,这看起来很奇怪。我试过两种方式都没有访问运气。)

我已经在 IIS 上重新启动了站点(在操作菜单中)。当我尝试从远程机器访问 ngrok url 时,ngrok returns 502 bad gateway,并且远程机器显示:

Failed to complete tunnel connection

The connection to http://whatever.ngrok.io was successfully tunneled to your ngrok client, but the client failed to establish a connection to the local address localhost:4085.

Make sure that a web service is running on localhost:4085 and that it is a valid address.

The error encountered was: dial tcp 127.0.0.1:4085: ConnectEx tcp: No connection could be made because the target machine actively refused it.

当我尝试在本地访问 localhost:4085 时,我得到 "This webpage is not available"。当我尝试转到 localhost:80 时,我得到重定向到 IIS 服务的另一个站点。当我尝试 127.0.0.1:80 时,出现 404 错误。

我尝试过使用 netstat -a -b,并尝试了与 127.0.0.1 关联的所有端口,但没有找到正确的站点(但 thing.somedomain.com 仍然可以正常工作)。

我完全迷惑了,不知道下一步该做什么,或者问题出在哪里(我如何启动 ngrok,我如何访问 ngrok,如何映射绑定, IIS 如何重新启动、防火墙问题或其他一些问题)。这应该很简单!

结果是 ApplicationHost.config 文件没有任何改变,而且我看错了 ApplicationHost.config 文件(真正的文件通常隐藏在 C:/Windows/System32/inetsrv/Config,但您可以从具有提升权限的命令提示符(运行 作为管理员)在记事本中打开它。实际的绑定信息是:

<binding protocol="http" bindingInformation="*:80:thing.somedomain.com" />

这与 IIS 显示的相符。也就是说,我需要更改的是调用 ngrok 的方式:

ngrok http -host-header=thing.somedomain.com:80

就是这样。我还允许外部流量通过这个主机名:

netsh http add urlacl url=http://thing.somedomain.com/ user=everyone

有一种方法可以让它更容易。假设您的 IISExpress 网站是 http://localhost:63254

像这样开始ngrok:

ngrok http -host-header=rewrite localhost:63254