通过 ngrok 隧道使用 https 连接到 GCE VM 上的服务器应用程序

通过 ngrok 隧道使用 https 连接到 GCE VM 上的服务器应用程序

我观察到 GCE VM 上的 ngrok 存在奇怪的行为。

我启动一个具有静态外部 IP 的“可抢占”VM 实例,并在其上正常启动 ngrok。我获得了将传入的 https 请求映射到本地主机上的 http 的 URL。我还可以检查隧道,一切运行正常。我创建了连接到此 VM 的可启动磁盘的快照。我关闭了 VM。

然后我创建另一个 GCE VM,它具有完全相同的配置、网络设置(当然,具有不同的静态 IP)等,只是我禁用了抢占性。可启动磁盘也是通过上面的快照创建的,因此它是上面抢占 VM 的磁盘的精确副本。我在这台非抢占机器上启动了 ngrok。Ngrok 没有任何抱怨,它似乎已经启动了一条隧道。

在不可中断虚拟机上启动隧道后 ngrok 的快照

然而,隧道却不起作用。 未找到隧道

有人能指出可能的原因/调查方向吗?

我已经尝试过以下操作,但没有成功:

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

答案1

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

请查看以下步骤:

  1. 使用网络标签创建虚拟机实例http-serverhttps-server
  2. 创建防火墙规则以允许 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 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.
  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. 根据现有虚拟机实例的快照创建新的虚拟机实例:
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 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.
  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. 停止ngrokinstance-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                                                                              
  1. 检查连接并且它按预期工作。

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

未找到隧道 1537504102c2.ngrok.io

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

我认为,就您而言,这可能是一些方面的问题ngrok,您应该通过电子邮件联系他们[email protected]

相关内容