ngrok允许您将本地计算机上运行的Web服务器公开到互联网。只是告诉ngrok你的web服务器正在监听什么端口。
如果你不知道你的web服务器正在监听什么端口,它可能是端口80,HTTP的默认值。
ngrok http 80
当您启动ngrok时,它将在您的终端中显示一个UI,其中包含您的隧道的公共URL以及有关通过您的隧道进行的连接的其他状态和指标信息。
ngrok by @inconshreveable
Tunnel Status online
Version 2.0/2.0
Web Interface http://127.0.0.1:4040
Forwarding http://92832de0.ngrok.io -> localhost:80
Forwarding https://92832de0.ngrok.io -> localhost:80
Connnections ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00
ngrok提供了一个实时的Web UI,您可以在其中内省您的隧道上运行的所有HTTP流量。在启动ngrok之后,只需在Web浏览器中打开http://localhost:4040即可检查请求详细信息。
尝试向您的公开网址发出请求。 之后,回头检查UI。 您将看到请求和响应的所有详细信息,包括时间,持续时间,标题,查询参数和请求有效负载以及线上的原始字节。
为外部API发出的webhooks开发通常会减慢你的开发周期,因为要求你做一些工作,比如拨打电话,触发挂钩请求。 ngrok允许您通过一次点击重新播放任何请求,大幅加快您的迭代周期。 单击Web检查UI上任何请求右上角的Replay按钮以重播。
ngrok特别支持在网络上使用的最常见的数据交换格式。请求或响应正文中的任何XML或JSON数据会自动为您打印并检查语法错误.
ngrok.com服务的许多高级功能在后面的章节中描述要求您注册一个帐户。 注册后,您需要使用显示在信息中心上的authtoken配置ngrok。 这将授予您访问仅限帐户功能的权限。 ngrok有一个简单的“authtoken”命令,使这很容易。 在引擎盖下,所有的authtoken命令是添加(或修改)authtoken属性在您的ngrok配置文件。
ngrok authtoken <YOUR_AUTHTOKEN>
ngrok为它为您打开的HTTP隧道分配随机十六进制名称。 这对于一次性个人用途是可以的。 但是,如果您在黑客马拉松上显示URL或与第三方Webhook集成,则如果隧道名称更改或难以阅读,可能会令人沮丧。 您可以使用-subdomain
开关为隧道URL指定自定义子域。
ngrok http -subdomain=inconshreveable 80
ngrok by @inconshreveable
...
Forwarding http://inconshreveable.ngrok.io -> 127.0.0.1:80
Forwarding https://inconshreveable.ngrok.io -> 127.0.0.1:80
任何可以猜测您的隧道URL的人都可以访问您的本地Web服务器,除非您使用密码保护它。 您可以使用-auth
开关使您的隧道安全。 这将对所有请求强制使用您指定为参数的用户名和密码的HTTP基本验证。
ngrok http -auth="username:password" 8080
而不是您的隧道显示为ngrok.io
的子域,您可以在您的域上运行ngrok隧道。要通过dev.example.com
运行隧道,请按照下列步骤操作:
dev.example.com
作为保留域。这保证没有其他人可以用自己的隧道劫持您的域名。
dev.example.com
为您的CNAME目标创建DNS CNAME记录。在本例中,我们将CNAME记录指向2w9c34maz.cname.ngrok.io
-hostname
开关调用ngrok,并将自定义域的名称指定为参数
ngrok http -hostname=dev.example.com 8000
ngrok记录每个HTTP请求和响应通过您的隧道进行检查和重放。 虽然这对开发非常有用,但当您在生产服务上运行ngrok时,您可能希望禁用它以确保安全性和性能。 使用-inspect
开关禁用对隧道的检查。
ngrok http -inspect=false 80
当转发到本地端口时,ngrok不会修改隧道HTTP请求,它们会在接收时以字节为单位复制到您的服务器。 某些应用程序服务器(如WAMP,MAMP和pow)使用Host
标头来确定要显示哪个开发站点。 因此,ngrok可以使用修改的主机头重写您的请求。 使用-host-header
标头交换机重写传入的HTTP请求。
如果指定了rewrite
,则将重写Host
头以匹配转发地址的主机名部分。任何其他值将导致主机头被重写为该值。
ngrok http -host-header=rewrite site.dev:80
ngrok http -host-header=example.com 80
默认情况下,当ngrok运行HTTP隧道时,它会打开HTTP和HTTPS流量的端点。如果您只希望转发HTTP或HTTPS流量,但不要同时转发,您可以使用-bind-tls
开关切换此行为。
ngrok http -bind-tls=false site.dev:80
ngrok http -bind-tls=true site.dev:80
HTTPS隧道使用ngrok.com证书终止ngrok.com服务器上的所有TLS(SSL)流量。 对于生产级服务,您需要使用自己的TLS密钥和证书对您的隧道流量进行加密。 ngrok使这个特别容易与TLS隧道。
ngrok tls -subdomain=encrypted 443
一旦你的隧道运行,尝试访问它与curl。
curl --insecure https://encrypted.ngrok.io
注意 --insecure
选项在前面的curl
命令示例中? 您需要指定,因为您的本地HTTPS服务器没有必要的TLS密钥和证书来终止任何ngrok.io子域的流量。 如果您尝试在网络浏览器中加载该网页,您会注意到它告诉您该网页可能不安全,因为证书不匹配。
如果你希望你的证书匹配和保护免受中间人攻击,你需要两件事。 首先,您需要为您拥有的域名购买SSL(TLS)证书,并配置本地Web服务器以使用该证书及其私钥来终止TLS连接。 如何执行此操作是特定于您的Web服务器和SSL证书提供程序,并超出本文档的范围。 为了举例,我们假设您为域secure.example.com
发出了SSL证书。
.
一旦你有你的密钥和证书,并正确安装,现在是时候运行一个TLS隧道在自己的自定义域名。 设置此的说明与HTTP隧道部分:自定义域中的隧道中描述的相同。 您注册的自定义域应与SSL证书(secure.example.com
)中的自定义域相同。 设置自定义域后,请使用-hostname
参数在您自己的域上启动TLS隧道。
ngrok tls -hostname=secure.example.com 443
您尝试公开的服务可能无法终止TLS连接。 ngrok客户端可以为您执行此操作,以便您可以加密端到端的流量,但不必担心本地服务是否具有TLS支持。 同时指定 -crt
and -key
命令行选项来指定TLS证书和密钥的文件系统路径,ngrok客户端将为您处理终止TLS连接。
ngrok tls -hostname secure.example.com -key /path/to/tls.key -crt /path/to/tls.crt 80
ngrok TLS隧道对所传输的底层协议没有假设。 本文档中的所有示例都使用HTTPS,因为它是最常见的用例,但您可以通过TLS隧道运行任何TLS封装协议(例如imaps,smtps,sips等),而不进行任何更改。
TLS隧道通过检查传入TLS连接上的服务器名称信息(SNI)扩展中存在的数据来工作。 并非所有启动TLS连接的客户端都支持设置SNI扩展数据。 这些客户端将无法与ngrok的TLS隧道正常工作。 幸运的是,几乎所有的现代浏览器都使用SNI。 一些现代软件库没有。 以下客户端列表不支持SNI,不能使用TLS隧道:
并非您希望公开的所有服务都是基于HTTP或TLS的。 ngrok TCP隧道允许您公开通过TCP运行的任何联网服务。这通常用于公开SSH,游戏服务器,数据库等。启动TCP隧道很容易。
ngrok tcp 1234
ngrok tcp 22
ngrok tcp 5432
ngrok tcp 25565
通常,每次启动TCP隧道时,都会随机分配远程地址和端口。 对于生产服务(和便利),您通常需要一个稳定的,有保证的远程地址。 为此,首先,登录到ngrok.com仪表板,然后单击“保留的TCP地址”部分中的“保留地址”。 然后,在调用ngrok以绑定您保留的TCP地址上的隧道时,使用-remote-addr
选项。
ngrok tcp --remote-addr 1.tcp.ngrok.io:20301 22
ngrok允许您将HTTP和TLS隧道绑定到通配符域。 所有通配符域(包括ngrok.io
的子域)必须首先在您的信息中心为您的帐户保留。 使用-hostname
or -subdomain
时,指定前导星号以绑定通配符域。
example.com
的所有子域上的流量ngrok http --hostname *.example.com 80
使用通配符域在ngrok.com服务的某些方面产生歧义。以下规则用于解决这些情况,并且了解如果您使用通配符域很重要。
为了示例的目的,假设您为您的帐户保留了地址*.example.com
。
foo.bar.baz.example.com
)的连接将路由到您的通配符隧道。example.com
的任何有效子域上绑定隧道,而无需创建其他保留的域条目。foo.example.com
或与其他帐户保留的通配符域相匹配的任何其他子域。foo.example.com
和*.example.com
的隧道,对 foo.example.com
的请求将始终路由到foo.example.com
ngrok可以转发到本地计算机上未运行的服务。而不是指定端口号,而只是指定一个网络地址和端口。
ngrok http 192.168.1.1:8080
ngrok运行全球分布式隧道服务器,为您的应用程序提供快速,低延迟的流量。
ngrok运行世界各地数据中心的隧道服务器。数据中心在给定区域内的位置可能改变而不通知(例如,欧洲服务器可能从法兰克福移动到伦敦)。
如果您没有明确选择一个区域,您的隧道将托管在默认区域,美国。 选择最接近您的区域与指定设置-region命令行标志或设置配置文件中的region
属性一样容易。 例如,在欧洲地区启动隧道:
ngrok http -region eu 8080
保留域和保留地址分配给特定区域(默认为美国区域)。 当您保留域或地址时,必须选择目标区域。 您不能绑定在分配给其他区域以外的其他区域中保留的域或地址。 尝试这样做会产生错误,并阻止您的隧道会话初始化。
ngrok客户端只能连接一个区域。这可能会在将来更改,但目前单个ngrok客户端无法同时在多个区域托管隧道。如果需要,运行多个ngrok客户端。
域不能同时为多个区域保留。 不可能在多个区域中将DNS地理平衡到同一个隧道名称。 如果您需要这样做(eu.tunnel.example.com
, us.tunnel.example.com
等),请使用特定地区的子网域或TLD。
您可以将帐户的隧道端点的访问权限列入白名单。 白名单由ngrok.com服务器强制执行。 它全局应用于所有的隧道端点。 检查到任何隧道端点的任何入站连接,以确保连接的源IP地址与白名单中的至少一个条目匹配。 如果连接与白名单不匹配,它会立即终止,而不会转发到ngrok客户端。
作为特殊情况,如果您的白名单为空,则允许所有连接。.
您可以在ngrok控制面板的auth选项卡上管理IP白名单。在“IP白名单”部分下输入新的IP地址,然后单击添加白名单条目Add Whitelist Entry。对IP白名单的更改最多可能需要30秒才能生效。
有时,您可能希望将整个IP范围列入白名单。 而不是只输入一个IP地址,您可以改为使用CIDR notation表示法指定一个IP地址块。 例如,要允许从10.1.2.0到10.1.2.255的所有IP地址,您需要向白名单中添加10.1.2.0/24。
有时,您的ngrok配置太复杂,无法在命令行选项中显示。 ngrok支持一个可选的,非常简单的YAML配置文件,它提供了同时运行多个隧道的能力,以及调整一些ngrok的更多奥术设置。
您可以使用-config
选项将路径传递到显式配置文件。这是建议所有生产部署。
ngrok http -config=/opt/ngrok/conf/ngrok.yml 8000
您可以多次传递-config
选项。 如果这样做,则将解析第一个配置,并将每个连续的配置合并到其上。 这允许您具有每个项目的ngrok配置文件与隧道定义,但主配置文件在您的主目录与您的authtoken和其他全局设置。
ngrok start -config ~/ngrok.yml -config ~/projects/example/ngrok.yml demo admin
如果不为配置文件指定位置,ngrok会尝试从默认位置$HOME/.ngrok2/ngrok.yml
读取一个位置。配置文件是可选的;如果该路径不存在,则不会发出错误。
在默认路径中,$ HOME是操作系统定义的当前用户的主目录。 它不是环境变量$ HOME,尽管它们通常是相同的。 对于主要操作系统,如果您的用户名是 example
,则可能会在以下路径找到默认配置:
OS X | /Users/example/.ngrok2/ngrok.yml
|
---|---|
Linux | /home/example/.ngrok2/ngrok.yml
|
Windows | C:\Users\example\.ngrok2\ngrok.yml
|
配置文件的最常见用法是定义隧道配置。 定义隧道配置很有用,因为您可以从命令行按名称启动预配置的隧道,而不必每次记住所有正确的参数。
隧道定义为配置文件中的tunnels
属性下的名称->配置的映射。
tunnels:
httpbin:
proto: http
addr: 8000
subdomain: alan-httpbin
demo:
proto: http
addr: 9090
hostname: demo.inconshreveable.com
inspect: false
auth: "demo:secret"
ngrok start httpbin
您定义的每个隧道都是配置选项名称到值的映射。 配置选项的名称通常与其相应的命令行开关相同。 每个隧道必须定义proto
and addr
。 其他属性是可用的,许多是协议特定的。
proto
|
required
all
|
隧道协议名称, one of http , tcp , tls |
---|---|---|
addr
|
required
all
|
将流量转发到此本地端口号或网络地址 |
inspect
|
all
|
启用http请求检查 |
auth
|
http
|
HTTP基本认证凭证,用于对隧道请求强制执行 |
host_header
|
http
|
将HTTP主机头重写为此值,或保留preserve 以使其保持不变 |
bind_tls
|
http
|
绑定HTTPS或HTTP端点或同时绑定true , false , or both |
subdomain
|
http
tls
|
子域名请求。如果未指定,请使用隧道名称 |
hostname
|
http
tls
|
请求的主机名(需要保留名称和DNS CNAME) |
crt
|
tls
|
PEM TLS证书,在本地转发之前终止TLS流量 |
key
|
tls
|
PEM TLS私钥在此路径上在本地转发之前终止TLS流量 |
client_cas
|
tls
|
此路径上的PEM TLS证书颁发机构将验证传入的TLS客户端连接证书。 |
remote_addr
|
tcp
|
绑定给定地址上的远程TCP端口 |
你可以传递多个隧道名称到ngrok start
和ngrok将同时运行它们。
ngrok start admin ssh metrics
ngrok by @inconshreveable
Tunnel Status online
Version 2.0/2.0
Web Interface http://127.0.0.1:4040
Forwarding http://admin.ngrok.io -> 10.0.0.1:9001
Forwarding http://device-metrics.ngrok.io -> localhost:2015
Forwarding https://admin.ngrok.io -> 10.0.0.1:9001
Forwarding https://device-metrics.ngrok.io -> localhost:2015
Forwarding tcp://0.tcp.ngrok.io:48590 -> localhost:22
...
您还可以要求ngrok使用--all
开关启动配置文件中定义的所有隧道。
ngrok start --all
相反,您可以要求ngrok运行,而不使用--none开关启动任何隧道。如果您计划通过API完全管理ngrok的隧道,这将非常有用。
ngrok start --none
示例配置文件如下所示。后续部分包含这些示例中显示的所有配置参数的完整文档。.
authtoken: 4nq9771bPxe8ctg7LKr_2ClH7Y15Zqe4bWLWF9p
tunnels:
app-foo:
addr: 80
proto: http
host_header: app-foo.dev
app-bar:
addr: 80
proto: http
host_header: app-bar.dev
authtoken: 4nq9771bPxe8ctg7LKr_2ClH7Y15Zqe4bWLWF9p
tunnels:
myapp-http:
addr: 80
proto: http
hostname: example.com
bind_tls: false
mypp-https:
addr: 443
proto: tls
hostname: example.com
authtoken: 4nq9771bPxe8ctg7LKr_2ClH7Y15Zqe4bWLWF9p
tunnels:
myapp-http:
addr: 4040
proto: http
subdomain: myapp-inspect
auth: "user:secretpassword"
inspect: false
authtoken: 4nq9771bPxe8ctg7LKr_2ClH7Y15Zqe4bWLWF9p
region: us
console_ui: true
compress_conn: false
http_proxy: false
inspect_db_size: 50000000
log_level: info
log_format: json
log: /var/log/ngrok.log
metadata: '{"serial": "00012xa-33rUtz9", "comment": "For customer alan@example.com"}'
root_cas: trusted
socks5_proxy: "socks5://localhost:9150"
update: true
update_channel: stable
web_addr: localhost:4040
tunnels:
website:
addr: 8888
auth: bob:bobpassword
bind_tls: true
host_header: "myapp.dev"
inspect: false
proto: http
subdomain: myapp
e2etls:
addr: 9000
proto: tls
hostname: myapp.example.com
crt: example.crt
key: example.key
ssh-access:
addr: 22
proto: tcp
remote_addr: 1.tcp.ngrok.io:12345
authtoken
此选项指定用于在客户端连接到ngrok.com服务时对其进行身份验证的身份验证令牌。创建ngrok.com帐户后,信息中心将显示分配给您帐户的authtoken。
authtoken: 4nq9771bPxe8ctg7LKr_2ClH7Y15Zqe4bWLWF9p
console_ui
true
|
启用控制台UI | |
---|---|---|
false
|
禁用控制台UI | |
iftty
|
default
|
仅在标准输出为TTY(不是文件或管道)时启用UI |
console_ui_color
transparent
|
在显示控制台UI时不要设置背景颜色 | |
---|---|---|
black
|
default
|
将控制台UI的背景设置为黑色 |
http_proxy
用于建立隧道连接的HTTP代理的URL。 许多HTTP代理有连接大小和持续时间限制,将导致ngrok失败。 像许多其他网络工具,ngrok也将尊重环境变量http_proxy
如果设置。
http_proxy: "http://user:password@proxy.company:3128"
inspect_db_size
positive integers | 大小(以字节为单位),分配给通过HTTP隧道保存请求的内存上限以供检查和重放。 | |
---|---|---|
0
|
default
|
使用默认分配限制,50MB |
-1
|
禁用检查数据库;这具有禁用所有隧道的检查的有效行为 |
log_level
记录详细信息级别。以递增的顺序,可能的值是:crit
,warn
,error
,info
,debug
log_format
写日志记录的格式。.
logfmt
|
人和机器友好的键/值对 | |
---|---|---|
json
|
换行符分隔的JSON对象 | |
term
|
default
|
自定义彩色人格式如果标准输出是TTY,否则与logfmt 相同 |
log
将日志写入此目标位置
stdout
|
写到标准输出 | |
---|---|---|
stderr
|
写入标准错误 | |
false
|
default
|
禁用日志记录 |
other values | 将日志记录写入磁盘上的文件路径 |
log: /var/log/ngrok.log
metadata
不透明的用户提供的字符串,将作为ngrok.com API响应的一部分返回到此客户端启动的所有隧道的列表在线隧道资源。 这是一个有用的机制,通过您自己的设备或客户标识符来识别隧道。 最多4096个字符。 .
metadata: bad8c1c0-8fce-11e4-b4a9-0800200c9a66
region
选择ngrok客户端将连接以托管其隧道的区域。
us
|
default
|
United States |
---|---|---|
eu
|
Europe | |
ap
|
Asia/Pacific | |
au
|
Australia |
root_cas
用于验证与ngrok服务器的TLS连接的根证书颁发机构。
trusted
|
default
|
请仅使用ngrok.com隧道服务的受信任证书根 |
---|---|---|
host
|
请使用主机操作系统信任的根证书。您可能希望使用此选项连接到第三方ngrok服务器。 | |
other values | 到具有要信任的证书颁发机构的磁盘上的证书PEM文件的路径 |
socks5_proxy
用于建立与ngrok服务器的连接的SOCKS5代理的URL。
socks5_proxy: "socks5://localhost:9150"
tunnels
名称到隧道定义的映射。有关更多详细信息请参阅隧道定义.
update
true
|
default
|
自动更新ngrok到最新版本,如果可用 |
---|---|---|
false
|
从不更新ngrok,除非用户手动启动 |
update_channel
更新通道确定要更新的已发布构建的稳定性。对所有生产部署使用“稳定”。
stable
|
default
|
渠道 |
---|---|---|
beta
|
更新为新的测试版本(如果有) |
web_addr
绑定的网络地址,用于服务本地Web界面和api。
network address | 绑定到此网络地址 | |
---|---|---|
127.0.0.1:4040
|
default
|
默认网络地址 |
false
|
禁用Web UI |
ngrok客户端公开了一个REST API,它授予对以下各项的编程访问权限:
Base URL | http://127.0.0.1:4040/api
|
---|---|
Authentication | None |
ngrok客户端API作为ngrok的本地Web检查接口的一部分公开。因为它在本地接口上提供,所以API没有身份验证。如果您覆盖配置文件中的web_addr
,基本URL将会更改。
curl http://localhost:4040/api/
请求参数可以使用 application/x-www-form-urlencoded
or
application/json
编码到API。确保您的客户机适当地设置请求的Content-Type头。 API返回的所有响应都是 application/json
ngrok客户端API保证,除非调用者明确选择使用较新的版本,否则绝不会对API进行更改。 呼叫者选择加入API的新版本的机制将在以后当有必要时被确定。 不会选择加入的API的不间断更改示例包括以下内容。
返回包含状态和指标信息的正在运行的隧道的列表。
tunnels
|
所有正在运行的隧道的列表。有关每个隧道对象的参数的文档,请参阅隧道详细资源 |
---|
{
"tunnels": [
{
"name": "command_line",
"uri": "/api/tunnels/command_line",
"public_url": "https://d95211d2.ngrok.io",
"proto": "https",
"config": {
"addr": "localhost:80",
"inspect": true,
},
"metrics": {
"conns": {
"count": 0,
"gauge": 0,
"rate1": 0,
"rate5": 0,
"rate15": 0,
"p50": 0,
"p90": 0,
"p95": 0,
"p99": 0
},
"http": {
"count": 0,
"rate1": 0,
"rate5": 0,
"rate15": 0,
"p50": 0,
"p90": 0,
"p95": 0,
"p99": 0
}
}
},
...
],
"uri": "/api/tunnels"
}
动态地在ngrok客户端上启动一个新的隧道。请求主体参数与在配置文件中用于定义隧道的参数相同。
参数名称和行为与配置文件中定义的参数名称和行为相同。使用 隧道定义部分作为配置参数及其行为的参考。
{
"addr": "22",
"proto": "tcp",
"name": "ssh"
}
2201状态码与响应主体描述启动的隧道。请参阅关于响应对象的参数的文档的 Tunnel 详细信息资源
{
"name": "",
"uri": "/api/tunnels/",
"public_url": "tcp://0.tcp.ngrok.io:53476",
"proto": "tcp",
"config": {
"addr": "localhost:22",
"inspect": false,
},
"metrics": {
"conns": {
"count": 0,
"gauge": 0,
"rate1": 0,
"rate5": 0,
"rate15": 0,
"p50": 0,
"p90": 0,
"p95": 0,
"p99": 0
},
"http": {
"count": 0,
"rate1": 0,
"rate5": 0,
"rate15": 0,
"p50": 0,
"p90": 0,
"p95": 0,
"p99": 0
}
}
}
获取命名运行隧道的状态和指标
{
"name": "command_line",
"uri": "/api/tunnels/command_line",
"public_url": "https://ac294125.ngrok.io",
"proto": "https",
"config": {
"addr": "localhost:80",
"inspect": true,
},
"metrics": {
"conns": {
"count": 0,
"gauge": 0,
"rate1": 0,
"rate5": 0,
"rate15": 0,
"p50": 0,
"p90": 0,
"p95": 0,
"p99": 0
},
"http": {
"count": 0,
"rate1": 0,
"rate5": 0,
"rate15": 0,
"p50": 0,
"p90": 0,
"p95": 0,
"p99": 0
}
}
}
停止正在运行的隧道
204状态代码与空主体
返回捕获用于检查的所有HTTP请求的列表。这将只返回仍在内存中的请求(ngrok在内存使用超过inspect_db_size
时清除捕获的请求))
limit
|
要返回的最大请求数 |
---|---|
tunnel_name
|
过滤器仅请求给定的隧道名称 |
curl http://localhost:4040/api/requests/http?limit=50
requests
|
捕获的请求列表。请参阅请求对象上文档的捕获的请求详细资源资源 |
---|
{
"uri": "/api/requests/http",
"requests": [
{
"uri": "/api/requests/http/548fb5c700000002",
"id": "548fb5c700000002",
"tunnel_name": "command_line (http)",
"remote_addr": "192.168.100.25",
"start": "2014-12-15T20:32:07-08:00",
"duration": 3893202,
"request": {
"method": "GET",
"proto": "HTTP/1.1",
"headers": {
"Accept": [
"*/*"
],
"Accept-Encoding": [
"gzip, deflate, sdch"
],
"Accept-Language": [
"en-US,en;q=0.8"
],
"Connection": [
"keep-alive"
],
"User-Agent": [
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36"
],
"X-Original-Host": [
"c159663f.ngrok.io"
]
},
"uri": "/favicon.ico",
"raw": ""
},
"response": {
"status": "502 Bad Gateway",
"status_code": 502,
"proto": "HTTP/1.1",
"headers": {
"Content-Length": [
"1716"
]
},
"raw": "",
}
},
...
]
}
针对隧道的本地端点重复请求
id
|
重放请求的ID |
---|---|
tunnel_name
|
要播放请求的隧道的名称。如果未指定,请求将针对其记录的相同隧道播放 |
curl -d "id=548fb5c700000002" http://localhost:4040/api/requests/http
204状态代码与空主体
删除所有捕获的请求
204 status code with no response body
返回捕获的请求的元数据和原始字节。原始数据在JSON响应中是base64编码的。如果本地服务器尚未响应请求,响应response
值可以为null
。
{
"uri": "/api/requests/http/548fb5c700000002",
"id": "548fb5c700000002",
"tunnel_name": "command_line (http)",
"remote_addr": "192.168.100.25",
"start": "2014-12-15T20:32:07-08:00",
"duration": 3893202,
"request": {
"method": "GET",
"proto": "HTTP/1.1",
"headers": {
"Accept": [
"*/*"
],
"Accept-Encoding": [
"gzip, deflate, sdch"
],
"Accept-Language": [
"en-US,en;q=0.8"
],
"Connection": [
"keep-alive"
],
"User-Agent": [
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36"
],
"X-Original-Host": [
"c159663f.ngrok.io"
]
},
"uri": "/favicon.ico",
"raw": ""
},
"response": {
"status": "502 Bad Gateway",
"status_code": 502,
"proto": "HTTP/1.1",
"headers": {
"Content-Length": [
"1716"
]
},
"raw": "",
}
}
ngrok承诺有关其接口的兼容性和稳定性,以便您可以自信地构建集成顶部,知道在升级到较新版本时期望的更改。
任何其他界面,如日志格式或Web UI不受任何兼容性承诺,并可能会更改,而不会在版本之间的警告。
对配置文件中定义的http
and tls
隧道的行为更改,或通过没有subdomain
or hostname
属性的API启动。
tunnels:
webapp:
proto: http
addr: 80
给定此示例隧道配置,行为将以以下方式改变。
使用隧道的名称作为子域启动隧道,生成URL http://webapp.ngrok.io
启动具有随机子域的隧道,例如像http://d95211d2.ngrok.io
这样的URL
添加与隧道名称相同的子域subdomain
属性:
tunnels:
webapp:
proto: http
addr: 80
subdomain: webapp
此行为已更改,以便可以启动随机域的隧道。这阻止了使用配置文件和客户端API释放层用户。.
从用户的角度来看,ngrok 2.0的工作方式几乎与ngrok 1.0完全相同。 话虽如此,对于使ngrok一致,更简单和更灵活的目的已经进行了一些重要的改变。 以下部分详细介绍了在升级时需要注意的最重要的区别。
ngrok 2.0不再假定您希望默认创建一个http隧道。相反,您必须显式地命名要创建的隧道的协议。最常见的是,这是一个http隧道。
ngrok -subdomain=myapp 80
ngrok http -subdomain=myapp 80
ngrok -proto=tcp 22
ngrok tcp 22
此更改使语法一致:ngrok [protocol] [target port]。 它允许每个隧道协议具有特定于它的选项以及其自己的帮助文本。 例如,如果您尝试使用TCP隧道,指定http基本身份验证现在感觉更自然和错误:
ngrok -httpauth "user:pw" 8080
ngrok http -auth "user:pw" 8080
ngrok -proto=tcp -httpauth "user:pw" 22
ngrok tcp -auth "user:pw" 22
ngrok配置文件看到了最大的变化。这里只突出最重要的区别。
ngrok配置文件的默认位置已更改。这是为了帮助您并行运行ngrok 1.0和ngrok 2.0。
~/.ngrok
~/.ngrok2/ngrok.yml
配置文件中authtoken键的拼写已更改为与命令行选项一致:
auth_token: abc123
authtoken: abc123
配置文件中的隧道定义已更改,使配置结构更简单,嵌套更少。 密钥proto
现在采用协议名称而不是映射,并且引入新密钥 addr
以指定隧道的本地目标端口/地址。
tunnels:
webapp:
proto:
http: 8080
auth: "user:pw"
ssh:
proto:
tcp: 22
tunnels:
webapp:
proto: http
addr: 8080
subdomain: webapp
auth: "user:pw"
ssh:
proto: tcp
addr: 22
在配置文件中指定的authtoken与用于ngrok 1.0的authtoken不同。您的2.0 ngrok authtoken可在您的ngrok 2.0仪表板上
出于安全原因,所有ngrok 2.0隧道现在都托管在ngrok.io
域。您不能使用1.0中保留的 ngrok.com
域作为2.0隧道。您需要在ngrok 2.0的仪表板上保留等效的域名
当切换到ngrok 2.0时,您需要更改您的DNS CNAME记录以指向不同的目标。 自定义域中的隧道的CNAME记录不再都指向ngrok.com。 而是为每个自定义域分配其CNAME记录的目标地址。 当您希望开始在ngrok 2.0上使用自定义域时,您需要更新DNS记录。 有关详细信息,请参阅自定义域的文档.
在升级过程中同时使用ngrok 1.0和ngrok 2.0非常容易。有三个常见的陷阱需要注意:
web_addr
设置为不同的值(例如127.0.0.1:4041),以避免冲突。
10,000+ companies rely on Olark software to chat with customers directly.