non-preemptible Google Compute Engine 虚拟机上的 ngrok
ngrok on a non-preemptible Google Compute Engine VM
我在 GCE VM 上观察到 ngrok 的奇怪行为。
我用静态外部 ip 启动了一个 'preemptible' VM 实例,并在其上正常启动 ngrok。我得到 URL 将传入的 https 请求映射到本地主机上的 http。我还可以检查隧道,一切正常。我创建了附加到此 VM 的可引导磁盘的快照。我关闭虚拟机。
然后我创建另一个 GCE VM,它具有完全相同的配置、网络设置(当然具有不同的静态 ip)等,只是我禁用了可抢占性。可引导磁盘也是通过上面的快照创建的,因此它是上面可抢占 VM 的磁盘的精确副本。我在这台 non-preemtible 机器上启动 ngrok。 ngrok 没有任何抱怨,它似乎已经启动了一个隧道。
但是,隧道不起作用。
谁能告诉我可能的原因/调查方向?
我已经尝试关注但没有成功:
- 在启动隧道之前登录到 ngrok 并使用
ngrok authtoken <token>
- 重写主机header:
ngrok http -host-header=rewrite localhost:3000
我已尝试在我的测试项目中按照您的步骤进行操作,没有发现任何问题。
请看下面我的步骤:
- 使用网络标记
http-server
和 https-server
: 创建 VM 实例
- 创建防火墙规则以允许 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 网络服务器:
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
- 检查连接,它按预期工作。
- 根据现有 VM 实例的快照创建新的 VM 实例:
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 网络服务器:
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
- 在
instance-8
停止 ngrok
并在 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
处的 运行:
Tunnel 1537504102c2.ngrok.io not found
当我使用旧链接检查 instance-10
处已关闭的 ngrok 的连接时,我得到了相同的结果,而 ngrok
是 instance-8
处的 运行。
我认为你的情况可能是 ngrok
方面的问题,你应该通过电子邮件与他们联系 contact@ngrok.com
。
我在 GCE VM 上观察到 ngrok 的奇怪行为。
我用静态外部 ip 启动了一个 'preemptible' VM 实例,并在其上正常启动 ngrok。我得到 URL 将传入的 https 请求映射到本地主机上的 http。我还可以检查隧道,一切正常。我创建了附加到此 VM 的可引导磁盘的快照。我关闭虚拟机。
然后我创建另一个 GCE VM,它具有完全相同的配置、网络设置(当然具有不同的静态 ip)等,只是我禁用了可抢占性。可引导磁盘也是通过上面的快照创建的,因此它是上面可抢占 VM 的磁盘的精确副本。我在这台 non-preemtible 机器上启动 ngrok。 ngrok 没有任何抱怨,它似乎已经启动了一个隧道。
但是,隧道不起作用。
谁能告诉我可能的原因/调查方向?
我已经尝试关注但没有成功:
- 在启动隧道之前登录到 ngrok 并使用
ngrok authtoken <token>
- 重写主机header:
ngrok http -host-header=rewrite localhost:3000
我已尝试在我的测试项目中按照您的步骤进行操作,没有发现任何问题。
请看下面我的步骤:
- 使用网络标记
http-server
和https-server
: 创建 VM 实例
- 创建防火墙规则以允许 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 网络服务器:
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
- 检查连接,它按预期工作。
- 根据现有 VM 实例的快照创建新的 VM 实例:
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 网络服务器:
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
- 在
instance-8
停止ngrok
并在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
处的 运行:
Tunnel 1537504102c2.ngrok.io not found
当我使用旧链接检查 instance-10
处已关闭的 ngrok 的连接时,我得到了相同的结果,而 ngrok
是 instance-8
处的 运行。
我认为你的情况可能是 ngrok
方面的问题,你应该通过电子邮件与他们联系 contact@ngrok.com
。