如何使用pyngrok免费账号运行多个ngrok会话?
问题描述
运行两个基于pyngrok的Python文件时,收到错误提示:
The ngrok process errored on start: authentication failed: Your account is limited to 1 simultaneous ngrok agent session.
You can run multiple tunnels on a single agent session using a configuration file.
已修改的ngrok.yml配置文件内容:
version: "2" authtoken: ********* tunnels: first: addr: 8443 proto: http second: addr: 8444 proto: http
两个Python文件代码:
文件1:
public_url = ngrok.connect(8443, "http").public_url
文件2:
public_url = ngrok.connect(8444, "http").public_url
如何通过pyngrok免费账号实现多隧道运行?
解决方案
免费ngrok账号仅支持1个Agent会话,但单个会话可创建多个隧道,无需启动多个Agent进程。核心是让两个Python文件共享同一个ngrok Agent会话,而非各自启动新会话。
方法1:通过配置文件批量启动隧道,业务文件获取对应URL
- 编写启动脚本加载配置并启动所有隧道:
# start_tunnels.py from pyngrok import ngrok, conf # 指定自定义配置文件路径 conf.get_default().config_path = "/path/to/your/ngrok.yml" # 启动配置中定义的所有隧道 tunnels = ngrok.start() # 可选:打印各隧道公网URL for tunnel in tunnels: print(f"{tunnel.name}: {tunnel.public_url}")
- 业务文件中直接获取已启动隧道的URL:
# 文件1 from pyngrok import ngrok public_url = ngrok.get_tunnel("first").public_url
# 文件2 from pyngrok import ngrok public_url = ngrok.get_tunnel("second").public_url
方法2:复用已启动的Agent会话创建多隧道
- 文件1中初始化会话并创建第一个隧道:
# 文件1 from pyngrok import ngrok, conf # 设置authtoken(也可通过配置文件加载) conf.get_default().authtoken = "你的authtoken" # 创建第一个隧道并命名 tunnel1 = ngrok.connect(8443, "http", name="first") public_url1 = tunnel1.public_url
- 文件2中直接复用已有会话创建第二个隧道:
# 文件2 from pyngrok import ngrok # pyngrok会自动检测已运行的Agent会话,无需重复初始化 tunnel2 = ngrok.connect(8444, "http", name="second") public_url2 = tunnel2.public_url
注意:需确保两个文件在同一环境运行,且第一个文件的Agent会话在第二个文件启动时处于活跃状态。
内容的提问来源于stack exchange,提问作者Vadim M
相关产品推荐
相关产品推荐

