非抢占式 Google Compute Engine VM 上的 ngrok
Posted
技术标签:
【中文标题】非抢占式 Google Compute Engine VM 上的 ngrok【英文标题】:ngrok on a non-preemptible Google Compute Engine VM 【发布时间】:2020-10-25 10:38:17 【问题描述】:我在 GCE VM 上使用 ngrok 观察到一个奇怪的行为。
我使用静态外部 ip 启动了一个“可抢占式”VM 实例,并在其上正常启动 ngrok。我得到了将传入的 https 请求映射到本地主机上的 http 的 URL。我还可以检查隧道,一切正常。我创建了附加到此 VM 的可启动磁盘的快照。我关闭了虚拟机。
然后我创建另一个 GCE VM,它具有完全相同的配置、网络设置(当然具有不同的静态 ip)等,除了我禁用了抢占性。可引导磁盘也是通过上面的快照创建的,因此它是上面抢占式 VM 磁盘的精确副本。我在这台不可抢占的机器上启动 ngrok。 Ngrok没有抱怨什么,它似乎已经开辟了一条隧道。
但是,隧道不起作用。
谁能指出我可能的原因/调查方向?
我已经尝试过没有成功:
-
在启动隧道之前登录 ngrok 并使用
ngrok authtoken <token>
重写主机头:ngrok http -host-header=rewrite localhost:3000
【问题讨论】:
【参考方案1】:我已尝试在我的测试项目上按照您的步骤进行操作,但没有发现任何问题。
请看下面我的步骤:
-
创建带有网络标签
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
-
检查连接,它按预期工作。
当我在ngrok
在instance-10
运行时使用旧链接检查与instance-8
已关闭ngrok 的连接时,我能够重现您的问题:
隧道 1537504102c2.ngrok.io 未找到
当我使用旧链接检查与 instance-10
已关闭 ngrok 的连接时,我得到了相同的结果,而 ngrok
在 instance-8
上运行。
我认为在您的情况下,ngrok
方面可能存在问题,您应该通过电子邮件contact@ngrok.com
与他们联系。
【讨论】:
以上是关于非抢占式 Google Compute Engine VM 上的 ngrok的主要内容,如果未能解决你的问题,请参考以下文章