服务器及ngrok环境配置的核心在于选择适合的穿透方案并完成服务端与客户端的对接,自建ngrok服务需要一台公网服务器和域名,而使用官方服务则更简单但需注意带宽限制。 这套配置能让你将本地开发环境暴露到公网,方便调试微信接口、远程办公或展示临时项目,无论你选哪种方式,理解服务器与ngrok的配合逻辑是第一步。参考2
ngrok内网穿透服务器配置教程
官方服务 vs 自建服务器:适用场景与价格对比
ngrok官方提供免费和付费隧道服务,免费版每次启动域名随机,带宽限制在1MB/s左右,适合临时测试,付费版按带宽和连接数收费,月费从几十到几百元不等,域名固定且支持自定义子域名,自建服务器则需要一台有公网IP的VPS,价格从每月几十元起步,带宽由你选的服务器决定,后续没有额外费用,适合长期使用或对数据安全有要求的场景。
选择自建还是官方,主要看四个因素:
- 使用频率:长期使用且需要稳定域名,自建更划算
- 带宽需求:官方付费版带宽上限固定,自建可选高带宽服务器
- 数据隐私:官方服务经第三方转发,自建数据完全在掌控中
- 上手难度:官方服务五分钟搞定,自建需要服务器环境配置
自建服务器的最低配置要求:
- 公网服务器(Linux系统,推荐CentOS 7+或Ubuntu 20+)
- 一个域名(用于绑定隧道,建议使用顶级域名或二级域名)
- 防火墙开放80、443端口(用于ngrok隧道监听)
- 服务器内存至少512MB,磁盘20GB,足以运行ngrok服务端
如果你想用国内服务器搭建ngrok,需注意域名备案问题,国内服务器提供商的公网IP需要域名备案才能绑定80端口,否则只能使用非标准端口,穿透时需在客户端指定端口号,多数情况下,使用海外服务器可以免备案,但延迟会稍高。
自建ngrok的服务器选择策略
服务器所在地直接影响穿透延迟,如果你的目标用户在国内,选择香港或日韩服务器延迟较低;如果面向海外,选择美国或欧洲,带宽方面,ngrok隧道流量受限于服务器带宽,建议选择至少1Mbps上行带宽,多人使用则需更高,业内专家指出,自建ngrok时,服务器的上行带宽是瓶颈,因为穿透流量从本地经过服务器转发到公网,上行带宽决定了并发传输速度。
ngrok绑定域名配置详解
绑定自定义域名是自建ngrok中最关键的一步,它直接决定隧道是否稳定可用,默认的ngrok客户端连接服务端时使用随机域名,重启后变化,无法用于生产环境,通过配置域名与服务器IP的绑定,你可以得到一个固定入口。
DNS解析与服务器IP关联
首先在你的域名管理后台添加一条A记录,将子域名指向你的服务器公网IP,如果你用ngrok.yourdomain.com,就设置A记录指向123.123.123,之后,在ngrok服务端配置中指定该域名,并生成对应的SSL证书。参考2
域名绑定涉及的三个关键配置:
- 服务端域名:在ngrokd启动参数中指定
-domain="ngrok.yourdomain.com" - 证书生成:使用openssl生成自签名证书,也包含该域名
- 客户端配置:在启动时通过
-server_addr指定服务端域名和端口
SSL证书配置与端口反向代理
自建ngrok默认使用HTTPS,需要服务端配置SSL证书,如果你不想使用自签名证书导致浏览器警告,可以用Let’s Encrypt申请免费证书,覆盖到你的子域名,证书文件放在服务器的指定路径,启动ngrokd时引用即可。
具体操作流程:
- 安装certbot,执行
certbot certonly --standalone -d ngrok.yourdomain.com - 将生成的
fullchain.pem和privkey.pem拷贝到ngrok服务端目录 - 启动ngrokd时加上
-tlsKey="privkey.pem" -tlsCrt="fullchain.pem"参数
如果你没有配置HTTPS,也可以只用HTTP隧道,但客户端和服务端之间传输不加密,建议仅在测试环境使用,绑定域名后,客户端启动时直接用-server_addr=ngrok.yourdomain.com:443即可连接到你的服务端。
服务器端ngrok环境搭建步骤
安装Go语言环境
ngrok服务端(ngrokd)使用Go语言编写,需要先安装Go编译环境,以Ubuntu 22.04为例:
sudo apt update sudo apt install golang-go
安装完成后,用go version确认版本,要求Go 1.19以上,如果你使用CentOS,可以从官方下载二进制包解压并配置环境变量。
编译ngrok服务端
从GitHub克隆ngrok源码(注意要使用官方版本,避免修改版导致安全问题):
git clone https://github.com/inconshreveable/ngrok.git
cd ngrok
生成服务端和客户端证书:
openssl genrsa -out base.key 2048
openssl req -new -x509 -nodes -key base.key -days 36500 -out base.pem
执行时会提示输入域名,务必输入你绑定的域名(如ngrok.yourdomain.com),然后编译服务端:
make release-server
编译完成后,在bin/目录下生成ngrokd文件,再编译客户端(根据本地操作系统):
GOOS=linux GOARCH=amd64 make release-client
客户端文件ngrok在bin/下,可将其拷贝到本地或服务器上用作客户端测试。
启动ngrokd并配置防火墙
在服务器上启动ngrokd:
./bin/ngrokd -domain="ngrok.yourdomain.com" -httpAddr=":80" -httpsAddr=":443"
httpAddr和httpsAddr是隧道监听端口,客户端通过这两个端口暴露服务- 如果没有绑定域名,可以用
-tunnelAddr=":4443"指定客户端与服务端通信的端口
防火墙需开放以下端口:参考2
- 80(HTTP隧道)
- 443(HTTPS隧道)
- 4443(客户端与服务端通信,默认)
- 如果使用自定义端口,开放相应端口
启动后,通过netstat -tlnp确认端口监听状态,如果使用云服务器,还要在安全组中放行这些端口。
客户端配置与连接测试
下载客户端并配置认证
客户端需要与服务端建立连接,首次启动需要设置认证令牌,在服务端目录下生成一个auth token:
./bin/ngrokd -add-user "user:password"
输出类似token=xxxxx,记录该token,在客户端启动时加上-authtoken=xxxxx参数。
客户端配置示例(假设本地运行一个Web服务在8080端口):
./ngrok -authtoken=xxxxx -server_addr=ngrok.yourdomain.com:4443 -subdomain=test 8080
-subdomain指定子域名,访问时使用test.ngrok.yourdomain.com- 如果不指定,会生成随机字符串
启动隧道并测试穿透
启动客户端后,控制台会显示隧道状态,包括公网URL、协议类型和流量统计,打开浏览器访问http://test.ngrok.yourdomain.com,如果看到本地的服务页面,说明穿透成功。
常见问题与排查方法:
- 客户端连接超时:检查服务器防火墙是否开放4443端口,以及服务器IP是否可达
- 域名解析错误:确认A记录指向正确,且DNS已生效(可用
nslookup验证) - 隧道启动失败:检查端口是否被占用,或是否重复使用了相同的子域名
- 访问提示证书错误:自签名证书不被浏览器信任,可忽略或配置Let’s Encrypt证书
如果客户端与服务端跨网络,比如你本地在内网,服务器在公网,确保本地网络没有限制对外连接,多数情况下,只要能访问公网,ngrok就能正常工作。
自建ngrok服务器让你完全掌控穿透链路的稳定性与安全,绑定域名后能获得固定入口,配合国内或海外服务器可以灵活应对不同用户群体,配置过程虽然需要几步操作,但一旦完成,后续维护成本极低,你只需专注本地开发,ngrok帮你打通内外网边界。
ngrok服务器配置常见问题解答
自建ngrok服务器需要什么配置?
一台公网VPS(Linux系统,512MB内存以上),一个域名,证书可通过自签名或Let’s Encrypt获取,服务器带宽建议至少1Mbps上行,否则穿透速度受限。
ngrok绑定域名有什么好处?
绑定域名后隧道地址固定,重启后不变,适合对接第三方API、微信开发等需要白名单地址的场景,同时可以配置自定义子域名便于记忆。
ngrok穿透速度慢,可能是什么原因?
穿透速度受服务器上行带宽、客户端上传带宽以及两地网络延迟影响,如果服务器在海外,国内用户访问会有额外延迟;如果服务器带宽不足,多人同时使用会进一步降低速度。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/530209.html


