如何在tcp模式下将客户端的IP地址从Haproxy转发到Nginx

Sin*_*nai 3 linux nginx logging haproxy

我想以 tcp 模式将真实客户端的 IP 地址从 haproxy 转发到我的后端服务器。Haproxy的配置如下:

frontend main
    bind *:80
    mode http
    option forwardfor
    option http-server-close    
    default_backend app-main

frontend https_main
    bind *:443
    mode tcp
    option tcplog
    option tcpka
    default_backend app-ssl

backend app-main
    balance roundrobin
    server web1 192.168.1.22:8080 check fall 3 rise 2
    server web2 192.168.1.33:8080 check fall 3 rise 2

backend app-ssl
    balance roundrobin
    mode tcp
    option ssl-hello-chk
    server web3 192.168.1.44:443
Run Code Online (Sandbox Code Playgroud)

http 请求的后端服务器是 apache,我用日志行替换了 httpd.conf 中的以下行,所以我现在可以正确获取客户端的 ip 地址:

LogFormat "%h %l %u %t \"%r\" %>s %b %{X-Forwarded-For}i" common
Run Code Online (Sandbox Code Playgroud)

我的 https 后端服务器使用 Nginx 作为 ssl 终止的 reverse_proxy 并将请求发送到 apache 后端。我的问题是我不知道如何在 nginx 日志中获取真实客户端的 ip 地址?我在 google 上搜索了很多,在 serverfault 和 stackoverflow 上找到了一些解决方案,但没有一个解决了我在 haproxy 中以 tcp 模式转发客户端 IP 地址的问题。任何帮助表示赞赏。

小智 5

您应该listen 443 ssl proxy_protocol;在 nginx 端使用,send_proxy在 Haproxy 端使用指令。

在 Nginx 中使用代理协议

Haproxy 文档

从 HAProxy 发送 PROXY 协议标头