为什么需要反向代理
在开发对外项目时,我们经常需要讲本机开发的Demo项目暴露到外网。
通常的做法是将项目打包发布到可连通外网的机器上。但是这些步骤费时费力,变更繁琐。
如果有一种工具能够直接将我本地的localhost
映射到外网地址,那么其他用户就能像访问其他互联网资源一样访问我们本地的开发项目。
这种工具就是反向代理。
ngrok
首先要介绍的就是ngrok。
ngrok简单,好用。在下载解压后,得到一个可运行的shell。立刻执行
$ ngrok http 8080
正常情况会随机分配一个子域名,然后其他用户就能通过该子域名访问我们本机的8080端口。例,输入命令后的会如下显示:
ngrok by @inconshreveable
Tunnel Status online
Version 2.1.3
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://38d37648.ngrok.io -> localhost:8080
Forwarding https://38d37648.ngrok.io -> localhost:8080
默认是免费账户,而免费账户的限制则是:
- HTTP/TCP tunnels on random URLs/ports
- 1 online ngrok process
- 4 tunnels per ngrok process
- 40 connections / minute
特别的,自定义子域名是收费项目!因此,只能说免费版刚刚能用。
localtunnel
如果ngrok被墙了(我以前碰到过),就可以试试localtunnel。localtunnel是基于NodeJS,因此安装也非常简单。
$ npm install -g localtunnel
启动即可:
$ lt --port 8080
并且,默认就支持自定义子域名(该功能待我确认)。例如:
$lt –port 8080 –subdomain yoursubdomain
就会返回一个yoursubdomain.localtunnel.me
的域名作为你的外网地址。
唯一可能的缺点是,若干年前我使用时,它的服务不太稳定,不知现在是否有改进。
商业版反向代理Forward
再提一个专业的反向代理Forwardhq。它的亮点功能有:
- 使用Chrome浏览器插件就激活反向代理。当然也有本地应用的命令行版本。
- 支持自定义子域名
- 稳定,被众多公司使用。
至于价格,小公司版(15 active tunnels)每年275刀,大公司版(30 active tunnels)每年550刀。好像不贵。
总结
介绍了几款反向代理工具,包括老牌的ngrok,基于NodeJS的localtunnel,也介绍了一款商业版供企业级用户参考。
这些反向代理工具在我们本地开发初期,能够简化部署,快速迭代,给工作带来很多便利。