在 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
我习惯使用 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