Node.js实现内网穿透服务的完整攻略
1. 什么是内网穿透
内网穿透(NGROK)是一种技术,通过将内网服务器映射到公网上,并建立内网服务器与公网之间的通道,从而让外部用户可以直接访问内网服务器。
最常用的场景是在开发调试过程中,我们本地开发的网站需要放到公网上进行测试,通常的方式是将应用程序部署到云平台上。但是这种方式不仅需要花费一定的成本,而且数据传输存在安全隐患。
内网穿透则可以省去部署到云平台以及数据传输安全隐患的问题,让我们更方便地进行开发调试。
2. 实现方法
2.1 选择内网穿透工具
常见的内网穿透工具有NGROK、FRP、NATAPP等,这里我们选择使用NGROK。NGROK支持从内网映射到公网,同时可以实现端口映射、负载均衡等多种功能。
2.2 配置服务端
- 下载并解压NGROK官方程序;
- 注册一个NGROK账号,并登陆用户中心;
- 在用户中心中创建新的authtoken,并记下该authtoken;
- 在服务器上运行NGROK服务端(服务端需支持开放80和443端口);
./ngrokd -domain="你的域名" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443" -tlsKey=server.key -tlsCrt=server.crt -log=stdout -log-level=DEBUG -authtoken=你的authtoken
- 以上的域名、authtoken、server.key、server.crt参数需要替换为你自己的。
2.3 配置客户端
- 下载并解压NGROK官方程序;
- 编写NGROK客户端配置文件ngrok.cfg;
server_addr: "你的域名:4443"
trust_host_root_certs: false
tunnels:
ssh:
remote_port: 22
proto:
tcp: "192.168.0.100:22"
http:
subdomain: "your-subdomain"
proto:
http: "192.168.0.100:80" - 将上面的your-subdomain替换成你自己的子域名,将192.168.0.100替换成你本地的机器IP地址;
- 启动NGROK客户端:
./ngrok -config=ngrok.cfg start ssh http
- 执行以上命令后,将显示类似于下面的信息:
Tunnel Status online
Version 2.3/2.1
Forwarding http://your-subdomain.ngrok.io -> 192.168.0.100:80
Forwarding tcp://your-subdomain.ngrok.io:22 -> 192.168.0.100:22
Web Interface http://127.0.0.1:4040
上面的your-subdomain.ngrok.io即为你的外网地址,这时外部用户就可以通过访问该地址来访问你本地的机器了。
3. 示例说明
示例一
问题描述:我正在使用本地MySQL数据库,在调试过程中需要让外部的测试团队能够访问该数据库。
解决方案:使用内网穿透的方式将本地的MySQL服务映射到公网上,为外部用户提供访问数据库的服务。
实现步骤如下:
- 在服务端配置NGROK服务端并启动服务;
- 在客户端的ngrok.cfg文件中,添加以下配置:
tunnels:
mysql:
remote_port: 3306
proto:
tcp: 127.0.0.1:3306
表示将本地3306端口的MySQL服务映射到公网上; - 启动NGROK客户端:
./ngrok -config=ngrok.cfg start mysql
- 执行以上命令后,将显示类似于下面的信息:
Tunnel Status online
Version 2.3/2.1
Forwarding tcp://your-subdomain.ngrok.io:3306 -> 127.0.0.1:3306
Web Interface http://127.0.0.1:4040
上面的your-subdomain.ngrok.io:3306即为你的外网地址和端口,这时外部用户就可以通过访问该地址和端口来访问你本地的MySQL服务了。
示例二
问题描述: 我正在开发一个本地网站,并且使用了Node.js作为后端框架,现在需要让外部用户能够通过访问公网来访问我的本地网站。
解决方案:使用内网穿透的方式将本地的Node.js服务映射到公网上,为外部用户提供访问网站的服务。
实现步骤如下:
- 在服务端配置NGROK服务端并启动服务;
- 在客户端的ngrok.cfg文件中,添加以下配置:
tunnels:
web:
remote_port: 3000
proto:
http: 127.0.0.1:3000
表示将本地3000端口的Node.js服务映射到公网上; - 启动NGROK客户端:
./ngrok -config=ngrok.cfg start web
- 执行以上命令后,将显示类似于下面的信息:
Tunnel Status online
Version 2.3/2.1
Forwarding http://your-subdomain.ngrok.io -> 127.0.0.1:3000
Web Interface http://127.0.0.1:4040
上面的your-subdomain.ngrok.io即为你的外网地址,这时外部用户就可以通过访问该地址来访问你本地的Node.js服务了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Nodejs实现内网穿透服务 - Python技术站