为您网络中的任何服务加上反向代理
一个网站可以在此响应它的名称,并把每个请求转交给您指定的地址。这就是让从未打算公开的服务获得域名、证书和入口的方式,而无需迁移它。
它适合做什么
那些已经能正常工作、只是需要一个入口的服务。
您网络中的某台设备
某个带有 Web 界面的设备或服务,自身没有证书,也不打算去申请。它无需任何改动即可获得域名和 HTTPS。
并非您编写的软件
某个监听端口并期望被直接访问的服务。给它一个域名,而不是一个需要别人记住的端口号。
另一台机器上的服务
同一网络中的另一台服务器,应当响应本机上的某个名称,而无需迁移应用或拆分 DNS。
正处于迁移中的内容
先把域名指过来,真正的迁移在后台进行,等您准备好了再更改地址。
长连接
WebSocket 协议升级会被透传,连接保持打开,因此实时仪表盘或聊天服务的表现与直连时一致。
为本来没有 HTTPS 的服务提供 HTTPS
证书在此签发并续期。反向代理后面的那个服务,完全不需要知道 TLS 的存在。
网站转发什么
代理之后的应用所期望的那些头部。
- 原始主机名,因此根据请求构造链接的应用能够构造出正确的链接。
- 访客的地址,同时通过
X-Real-IP和X-Forwarded-For传递,因此日志和速率限制看到的是访客,而不是本服务器。 - 协议方案,通过
X-Forwarded-Proto传递,因此即使与应用之间是明文 HTTP,应用也能知道访客是通过 HTTPS 到达的。 - 协议升级请求,逐跳头部按请求重写而非盲目转发,这正是 WebSocket 能够工作的原因。
- 响应即时传出,缓冲已关闭,因此流式输出的应用可以持续流式传输。
这些限制,以及其中的原因
由管理员设置,并指向一个地址。
这是唯一一种客户无法自行选择的运行环境,因为它所能指向的目标,正是它之所以有用的原因。
反向代理把来自公网的请求转发到本服务器可以访问的某处。这包括本机上那些从未打算公开的服务,以及私有网络内部那些仅因外界无法访问才算安全的服务。允许客户在那个字段里随意填写地址,就等于让客户来决定服务器对外暴露什么。
- 仅管理员可操作。创建代理网站或更改其指向,对其他任何人均被拒绝。
- 一个数字地址和明确的端口,使用
http或https。这里有意不接受主机名:日后解析的名称可能在有人修改 DNS 记录的当天,悄然把已批准的代理指向另一台主机。 - 只有来源,别无其他。没有凭据、没有路径、没有查询参数、没有片段标识。被批准的是一个目标地址,而不是一个请求。
- 可路由的地址。未指定地址、多播地址和链路本地地址都会被拒绝,而不是写入配置文件。
那些规则是刻意收窄的。这个字段的价值就在于它能触及各种服务,因此它唯一安全的形态,就是其所能触及的目标已被有权写入的人精确写明。
它不是什么
它并不会让其背后的那个服务变成由您管理。
代理网站由一个名称、一张证书和一个目标地址组成。在该目标地址上响应的,仍然是别人的程序、按别人的节奏运行:本面板不会启动它、备份它、监控它或维持它运行,而指向一个已关闭服务的反向代理,就是一个返回错误的网站。
如果您希望把那个服务本身也放在这里托管,Node.js 应用或容器网站才是能做到这一点的运行环境,而运行环境页面对全部五种作了对比。