我观察到 GCE VM 上的 ngrok 存在奇怪的行为。
我启动一个具有静态外部 IP 的“可抢占”VM 实例,并在其上正常启动 ngrok。我获得了将传入的 https 请求映射到本地主机上的 http 的 URL。我还可以检查隧道,一切运行正常。我创建了连接到此 VM 的可启动磁盘的快照。我关闭了 VM。
然后我创建另一个 GCE VM,它具有完全相同的配置、网络设置(当然,具有不同的静态 IP)等,只是我禁用了抢占性。可启动磁盘也是通过上面的快照创建的,因此它是上面抢占 VM 的磁盘的精确副本。我在这台非抢占机器上启动了 ngrok。Ngrok 没有任何抱怨,它似乎已经启动了一条隧道。
然而,隧道却不起作用。 未找到隧道
有人能指出可能的原因/调查方向吗?
我已经尝试过以下操作,但没有成功:
- 登录 ngrok 并
ngrok authtoken <token>
在启动隧道之前使用 - 重写主机头:
ngrok http -host-header=rewrite localhost:3000
答案1
我已尝试在我的测试项目中按照您的步骤操作,并未发现任何问题。
请查看以下步骤:
- 使用网络标签创建虚拟机实例
http-server
并https-server
: - 创建防火墙规则以允许 HTTP/HTTPS 传入连接:
gcloud compute firewall-rules create default-allow-http --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp:80 --source-ranges=0.0.0.0/0 --target-tags=http-server
gcloud compute firewall-rules create default-allow-https --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp:443 --source-ranges=0.0.0.0/0 --target-tags=https-server
- 安装
ngrok
并php
:
instance-8:~$ sudo apt update
instance-8:~$ sudo apt install snapd
instance-8:~$ sudo snap install ngrok
instance-8:~$ sudo apt install php7.2-cli
- 连接
ngrok
账户:
instance-8:~$ ngrok authtoken xxxxxxxxxxxxxxxxxxxxxxxgmfHM
- 使用虚拟页面启动嵌入式 php web 服务器:
instance-8:~$ php -S localhost:8000
PHP 7.2.24-0ubuntu0.18.04.6 Development Server started at Mon Jul 6 17:19:31 2020
Listening on http://localhost:8000
Document root is /home/username
Press Ctrl-C to quit.
- 开始
ngrok
:
instance-8:~$ ngrok http -host-header=rewrite localhost:8000
ngrok by @inconshreveable (Ctrl+C to quit)
Session Status online
Account XXX (Plan: Free)
Version 2.3.35
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://1537504102c2.ngrok.io -> http://localhost:8000
Forwarding https://1537504102c2.ngrok.io -> http://localhost:8000
Connections ttl opn rt1 rt5 p50 p90
2 0 0.03 0.01 0.00 0.00
HTTP Requests
-------------
GET /favicon.ico 404 Not Found
GET / 200 OK
- 检查连接并且它按预期工作。
- 根据现有虚拟机实例的快照创建新的虚拟机实例:
gcloud compute disks snapshot instance-8 --snapshot-names=snapshot-1 --zone=europe-west3-a --storage-location=europe-west3
gcloud compute disks create instance-10 --size=10 --zone=europe-west3-a --source-snapshot=snapshot-1 --type=pd-standard
gcloud compute instances create instance-10 --zone=europe-west3-a --machine-type=e2-medium --tags=http-server,https-server --disk=name=instance-10,device-name=instance-10,mode=rw,boot=yes,auto-delete=yes --reservation-affinity=any
- 使用虚拟页面启动嵌入式 php web 服务器:
instance-10:~$ php -S localhost:8000
PHP 7.2.24-0ubuntu0.18.04.6 Development Server started at Mon Jul 6 17:42:59 2020
Listening on http://localhost:8000
Document root is /home/username
Press Ctrl-C to quit.
- 开始
ngrok
:
instance-10:~$ ngrok http -host-header=rewrite localhost:8000
Your account 'XXX' is limited to 1 simultaneous ngrok client session.
Active ngrok client sessions in region 'us':
- ts_1eK49pNAq8zIKDN2ikKdCvVhwHz (35.XXX.153.XXX)
ERR_NGROK_108
- 停止
ngrok
于instance-8
并开始于instance-10
:
instance-10:~$ ngrok http -host-header=rewrite localhost:8000
ngrok by @inconshreveable (Ctrl+C to quit)
Session Status online
Account XXX (Plan: Free)
Version 2.3.35
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://38c2f5d9f673.ngrok.io -> http://localhost:8000
Forwarding https://38c2f5d9f673.ngrok.io -> http://localhost:8000
Connections ttl opn rt1 rt5 p50 p90
4 0 0.34 0.39 0.00 0.00
HTTP Requests
-------------
GET /favicon.ico 404 Not Found
GET / 200 OK
- 检查连接并且它按预期工作。
当我在运行instance-8
时使用旧链接检查与已关闭的 ngrok 的连接时,我能够重现您的问题:ngrok
instance-10
未找到隧道 1537504102c2.ngrok.io
我得到了相同的结果,当我在运行instance-10
时使用旧链接检查与已关闭的 ngrok 的连接时。ngrok
instance-8
我认为,就您而言,这可能是一些方面的问题ngrok
,您应该通过电子邮件联系他们[email protected]
。