Ngrok 是一款可以将本地服务映射到公网的工具,它可以帮助开发者在本地开发的同时,提供一个可以让外网访问的地址。本文将详细介绍 ngrok 的安装、使用以及相关注意事项。
一、安装 ngrok
Ngrok 下载地址:https://ngrok.com/download
安装 ngrok 非常简单,只需要到官网下载对应系统版本的文件即可。
wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
unzip ngrok-stable-linux-amd64.zip
解压完成后,可以使用以下命令进行验证:
./ngrok -v
如果输出类似 ngrok version 3.3.0 的内容,则说明安装成功。
二、使用 ngrok
1. 注册账号并获取 Auth Token
在使用 ngrok 之前,需要先注册一个账号,获取 Auth Token。可以到 ngrok 的官网进行注册,注册完成后,即可获取 Auth Token。
我们可以使用以下命令,将 Auth Token 保存到 ngrok 的配置中:
./ngrok authtoken <your-auth-token>
其中,<your-auth-token> 替换为你自己的 Auth Token。
2. 映射本地服务
使用 ngrok 进行映射只需要一行命令:
./ngrok http <port>
其中,<port> 替换为你要映射的本地服务端口号。
运行完命令后,可以看到类似以下的输出:
ngrok by @inconshreveable (Ctrl+C to quit)
Session Status online
Account John Doe (Plan: Free)
Version 2.3.35
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://<generated-subdomain>.ngrok.io -> http://localhost:<port>
Forwarding https://<generated-subdomain>.ngrok.io -> http://localhost:<port>
其中,<generated-subdomain> 是 ngrok 自动生成的域名前缀,可以通过该域名前缀,访问到本地服务。
注意,运行该命令时,本地端口必须是可用状态,否则 ngrok 映射会失败。
如果需要开启 https 支持,可以使用以下命令:
./ngrok http <port> --hostname=<your-domain>
其中,<your-domain> 替换为你自己的域名,需要在配置 SSL 证书时用到。
3. 配置 SSL 证书
ngrok 会自动为你创建一个子域名并完成映射,但这个子域名在浏览器中是不受信任的,需要配置 SSL 证书。
SSL 证书的配置很简单,只需要将证书文件放到 ngrok 的配置目录中即可。
SSL 证书通常有两个文件,分别是证书文件和私钥文件,可以使用如下命令生成证书文件和私钥文件:
openssl genrsa -out <your-domain>.key 2048
openssl req -new -key <your-domain>.key -out <your-domain>.csr
openssl x509 -req -days 365 -in <your-domain>.csr -signkey <your-domain>.key -out <your-domain>.crt
其中,<your-domain> 替换为你自己的域名。
生成证书后,可以使用以下命令将证书文件拷贝到 ngrok 的配置目录中:
sudo cp <your-domain>.crt /usr/local/ngrok/cert/
然后,可以使用以下命令来启动 ngrok,启动时需要指定证书文件名:
./ngrok http <port> --hostname=<your-domain> --tls-cert=<your-domain>.crt --tls-key=<your-domain>.key
三、注意事项
1. ngrok 流量监控
ngrok 内置了一个 web 界面,可以用来监控流量。可以通过在浏览器中访问 http://127.0.0.1:4040 进行查看:
Session Status online
Account John Doe (Plan: Free)
Version 2.3.35
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://<generated-subdomain>.ngrok.io -> http://localhost:<port>
Forwarding https://<generated-subdomain>.ngrok.io -> http://localhost:<port>
Connections ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00
HTTP Requests
-------------
2. 连接数量限制
ngrok 免费版本有连接数量限制,每个连接只能维持 8 小时,且每分钟限制 40 次请求。如果需要更多的连接数和更长时间的连接,则需要购买 ngrok 的付费版。
3. 防火墙设置
为了确保 ngrok 映射成功,你需要打开本地服务所在机器的防火墙端口,以确保 ngrok 可以访问到本地服务。
如果在使用过程中遇到了连接失败,可以检查是否有防火墙或代理的限制。
4. 本地域名映射
在本地测试时,可以使用 host 文件中的域名映射功能,来模拟 ngrok 动态生成的子域名。例如,在 host 文件中添加以下配置:
127.0.0.1 <your-domain>
这样,可以在本地通过 <your-domain> 访问到你需要映射的服务。
结语
本文对 Ngrok 的安装、使用和注意事项进行了详细介绍,以帮助开发者更好地使用这一工具。在使用过程中,需要注意连接数量限制、防火墙设置和本地域名映射等问题,并且注意谨慎使用 ngrok 映射的服务,以免造成安全隐患。