代理协议(PROXY Protocol)¶
GOST对代理协议的支持依赖于pires/go-proxyproto库。
接收代理协议头¶
GOST服务支持接收代理协议头(PROXY protocol v1/v2),当服务处于其他代理服务(例如Nginx)后面时,通过代理协议用于获取客户端真实IP。
通过proxyProtocol
选项开启接收代理协议功能。
Tip
代理协议功能开启后,并不强制客户端发送代理协议头,服务端会根据接收到的数据自动判断是否有代理协议数据。
示例¶
这里8000端口模拟一个反向代理服务,将数据转发给后面的8080服务。8080端口是一个端口转发服务。
此时如果直接访问8000端口,8080端口的服务获取到的客户端IP为127.0.0.1。
{
"client":"127.0.0.1:53574",
"handler":"tcp",
"kind":"handler",
"level":"info",
"listener":"tcp",
"local":"127.0.0.1:8080",
"msg":"127.0.0.1:53574 <> 127.0.0.1:8080",
"remote":"127.0.0.1:53574",
"service":"service-1"
}
如果客户端发送代理协议头,8080端口服务就能获取到客户端的真实地址。
{
"client":"192.168.100.100:57208",
"handler":"tcp",
"kind":"handler",
"level":"info",
"listener":"tcp",
"local":"127.0.0.1:8080",
"msg":"127.0.0.1:41700 <> 127.0.0.1:8080",
"remote":"127.0.0.1:41700",
"service":"service-1"
}
发送代理协议头¶
3.2.1
GOST支持向上游转发节点和代理节点发送代理协议头,以便告知上游节点真实IP地址。
端口转发节点¶
通过在handler上使用proxyProtocol
选项开启代理协议头发送功能。
这里的handler.proxyProtocol
为限定作用域参数,其作用对象为handler。如果直接使用proxyProtocol
则其作用对象为service级别。
代理节点¶
限制
代理协议功能目前不支持UDP协议。