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 没有任何抱怨,它似乎已经启动了一个隧道。

但是,隧道不起作用。

谁能告诉我可能的原因/调查方向?

我已经尝试关注但没有成功:

  1. 在启动隧道之前登录到 ngrok 并使用 ngrok authtoken <token>
  2. 重写主机header:ngrok http -host-header=rewrite localhost:3000

我已尝试在我的测试项目中按照您的步骤进行操作,没有发现任何问题。

请看下面我的步骤:

  1. 使用网络标记 http-serverhttps-server:
  2. 创建 VM 实例
  3. 创建防火墙规则以允许 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
  1. 安装 ngrokphp:
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
  1. ngrok 连接到帐户:
instance-8:~$ ngrok authtoken xxxxxxxxxxxxxxxxxxxxxxxgmfHM
  1. 启动带有虚拟页面的嵌入式 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.
  1. 开始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       
  1. 检查连接,它按预期工作。
  2. 根据现有 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
  1. 启动带有虚拟页面的嵌入式 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.
  1. 开始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
  1. instance-8 停止 ngrok 并在 instance-10:
  2. 开始
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                                                                              
  1. 检查连接,它按预期工作。

当我使用旧链接检查与 instance-8 处关闭的 ngrok 的连接时,我能够重现您的问题,而 ngrokinstance-10 处的 运行:

Tunnel 1537504102c2.ngrok.io not found

当我使用旧链接检查 instance-10 处已关闭的 ngrok 的连接时,我得到了相同的结果,而 ngrokinstance-8 处的 运行。

我认为你的情况可能是 ngrok 方面的问题,你应该通过电子邮件与他们联系 contact@ngrok.com