$proxy_protocol_addr

$proxy_protocol_addr 返回来自 PROXY protocol 的客户端地址(如果已启用)。 — NGINX Core (HTTP)

$proxy_protocol_addr NGINX Core (HTTP)

说明

变量 $proxy_protocol_addr 是 NGINX 对 PROXY protocol 支持的一部分,该协议允许通过代理服务器传递原始客户端 IP 地址。当客户端连接到启用了 PROXY protocol 支持的 NGINX 服务器时,NGINX 可以解析代理发送的 PROXY protocol 头并提取原始客户端地址。这使 NGINX 能够正确记录请求时使用客户端的实际 IP 地址,而不是本来会被记录的代理的 IP 地址。 该变量通常用于 NGINX 部署在实现了 PROXY protocol 的负载均衡器或反向代理后面的场景。只有当传入连接包含相应的 PROXY protocol 头时,该变量才会被填充;在其他情况下,通常返回空值。直接连接到 NGINX 的客户端无法从该变量中受益,并且它会显示最后一个代理的 IP。根据客户端的连接类型,该变量通常包含 IPv4 或 IPv6 地址之一。

配置示例

server {
    listen 80 proxy_protocol;
    location / {
        proxy_pass http://backend;
        add_header X-Real-IP $proxy_protocol_addr;
    }
}

子系统

http

可缓存

上下文

http, server, location, if

确保在 NGINX 服务器和上游代理上都启用了 PROXY protocol。

如果传入连接不包含 PROXY protocol 头部,则该变量将为空。

确保只允许受信任的代理使用 proxy protocol 进行连接,以避免欺骗。