方块和沙箱链接的每个公开地址都有两种形式。经过代理的地址(除非另行要求,你得到的就是它)通过平台前面的代理 (Cloudflare) 到达平台:代理持有 TLS 连接、吸收攻击 (DDoS)、过滤请求,还能缓存响应。直连的地址直接到达平台自己的边缘节点,中间什么都没有,用于代理无法承载的情况。
| 经过代理 | 直连 | |
|---|---|---|
| 方块 | https://<app>-<project>.glac.run |
https://<app>-<project>.direct.glac.run,需要应用自己开启(见下文) |
| 沙箱的端口链接 | https://<port>-<sandbox id>-<signature>.glac.run |
把同样的第一部分放到 direct.glac.run 下:https://<port>-<sandbox id>-<signature>.direct.glac.run |
| 自定义域名 | 以 proxied: true(默认)注册:一条指向 <token>.glac.run 的 CNAME |
以 proxied: false 注册:一条指向 <token>.direct.glac.run 的 CNAME,或指向边缘节点地址的 A 和 AAAA 记录 |
SSH 总是直连。
代理的限制
| 限制 | 达到时会怎样 | |
|---|---|---|
| 请求体 | 100 MB | 413,请求不会到达你的应用 |
| 响应 | 两段数据之间最多间隔 125 秒 | 524 |
| 协议 | 只支持 HTTP 和 HTTPS | 无法连接 |
| WebSocket | 可以承载,但代理自身更新时会关闭它们 | 用心跳保持,断开后重连 |
| gRPC | 暂时不能经过代理 | 使用直连域名 |
上传更大的内容、请求运行更久却不发送任何数据,或使用 HTTP 以外的协议时,请用直连域名;或者分段上传、立即返回 202 再让客户端重新查询,或者在长时间的响应中至少每 100 秒发送一点数据。
方块和你自己域名的响应,会由代理按它们的 Cache-Control 缓存。沙箱链接的响应不缓存,除非沙箱自己的响应设置了 Cloudflare-CDN-Cache-Control。
直连域名
- 方块用
direct: true(POST /v1/apps或PATCH /v1/apps/{app})获得直连域名;之后它的响应中会有direct_url,设为false则去掉。没有开启的应用只有经过代理的地址。 - 沙箱链接总有直连形式:把链接的第一部分放到
direct.glac.run下即可。无需任何设置。 - 直连域名没有代理的任何防护:只有边缘节点自己的限制保护它,每个访客地址最多同时 500 个连接(一个 IPv6 /64 网段算一个地址;超过时返回 429
too_many_connections),每个沙箱或方块最多 1,000 个,每个边缘节点最多 6,000 个。
自定义域名
POST /v1/domains(带 {domain, app})也接受 proxied(默认 true),PATCH /v1/domains/{id} 可以修改它。
- 经过代理:从你的域名添加一条指向
<token>.glac.run的 CNAME。代理会验证域名并签发证书,证书会自动续期。响应中的proxy说明进展:waiting、full(等待名额)、pending(正在验证域名、签发证书)、active,或failed并附上代理的原话;proxy.records列出一些记录,添加它们可以在指向域名之前就拿到证书。 - 直连:添加一条指向
<token>.direct.glac.run的 CNAME,或者添加响应给出的 A 和 AAAA 记录以及它的 TXT 验证记录;边缘节点会从 Let’s Encrypt 签发证书并续期。新域名的证书、续期的证书和删除的域名,都会在每个边缘节点的下一次 TLS 握手时生效,不需要为此重启任何东西。 - 根域名 (
example.com) 不能用 A 记录经过代理:只有你的 DNS 能在那里展平 CNAME(ALIAS、ANAME)时才能经过代理;否则请以proxied: false注册。 - 修改
proxied会改变通往你的方块的路径:证书属于新的路径,所以域名会重新等待证书。 - 请求是否经过代理由你的 DNS 决定:指向直连目标的域名就直连提供服务。