Localtunnel(Node.js 版) 使用教程

2019-12-14 by 杜宏伟

有时想在公网访问内网的内容,如何快速简单的实现这个能力?

简介

Localtunnel 的作用在于可以让内网服务器上的内容在公网上可以访问到。 一般来说,未发布的项目只有内网可见。测试通过后,才会发布到公网。但是这给测试带来的极大的麻烦。Localtunnel可以在公网访问内网的内容,对于那些布署成本很高的项目,执行一条命令就可以在公网访问,也是一种权宜之计。不过,弊端也是有的,首先,速度很慢,其次,对于数据接口访问会存在跨域问题。所以根本解决在移动端测试开发中的项目的这个问题,需要建立一套测试系统。为了避免未发布的项目过早暴露,可以增加登录机制,只有授权过的用户才可以访问,后面我会专门介绍这方面的面容。

安装客户端

npm install -g localtunnel

使用

Localtunnel 相当于是一个二传手。把内网主机上的内容发给公网主机。所以首先需要内网主机发布web服务。 比如现在内网主机在 3000端口发布了web服务,通过下面的命令可以把 服务发布到公网

lt --port 3000 --subdomain duhongwei

# your url is: https://duhongwei.localtunnel.me

--port 表示要发布的web服务的端口是3000,--host 表示自定义的二级域名是 duhongwei

host需要长一些,三个字符的一般无效。

把3000端口的服务代理到公网后,就可以通过 https://duhongwei.localtunnel.me 访问了。

这个默认的公网web服务有时会很慢,所以需要自己搭一个公网服务。

服务端安装

git://github.com/defunctzombie/localtunnel-server.git
cd localtunnel-server
npm install

一切都很顺利。找到执行文件执行

./bin/server --port 2000

这里的 --port和客户端的不一样。这里是表示服务端提供的web服务的端口是多少。比如你的web服务器的访问地址是 https://www.duhongwei.site 代理服务的访问地址就是 https://www.duhongwei.site:2000

当执行上面的命令时会报错,原因是作者用了 ES6 module 语法。 import 这种nodejs默认是不支持的。要想顺利执行代码,需要借助babel

babel转码

cd localtunnel-server
npm install babel-cli babel-preset-env  --save-dev
./node_modules/babel-cli/bin/babel-node.js --presets env ./bin/server --port 2000

测试一下没问题后,可以用 pm2 来管理服务,这样就不用担心关掉终端服务会停止。

sudo install -g pm2
pm2 start ./node_modules/babel-cli/bin/babel-node.js --presets env ./bin/server --port 2000

有了自己的服务器后,就可以使用自己的服务器做代理了。

lt --host https://www.duhongwei.site:2000 --port 3000 --subdomain duhongwei

服务器支持

做了上面的工作,可能还是不成功。因为需要域名支持泛解析。什么是泛解析呢?就是可以支持下面的域名解析到ip

a.duhongwei.site b.duhongwei.site ...

泛的意思相当于* 。因为同一时间localtunnel可能会接到不同的代理请求, localtunnel 是通过二级域名来判断去响应哪个代理。

现在终于大功造成。

参考

我叫杜宏伟,前端开发。

一直想写博客,在2018的年的最后几天,终于上线了。

对于前端开发,一个特点就是太零散,很容易会了后面忘了前面,所以归纳总结很重要。再有就是分享,做前端好多年,以前都是看你们写的文章, 现在我也开始写一些,希望可以帮到入行的小伙伴。微信号 duhongwei5775

欢迎转载,只需注明作者,出处即可

版权说明:署名 4.0 国际(CC BY 4.0)