Linux

如何在 tcp 模式下將客戶端的 IP 地址從 Haproxy 轉發到 Nginx

  • October 26, 2017

我想以 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

http 請求的後端伺服器是 apache,我已將 httpd.conf 中的以下行替換為日誌行,因此我現在可以正確獲取客戶端的 IP 地址:

LogFormat "%h %l %u %t \"%r\" %>s %b %{X-Forwarded-For}i" common

我的 https 後端伺服器使用 Nginx 作為 ssl 終止的 reverse_proxy 並將請求發送到 apache 後端。我的問題是我不知道如何在 nginx 日誌中獲取真實客戶端的 IP 地址?我搜尋了很多,並在 serverfault 和 stackoverflow 上找到了一些解決方案,但它們都沒有解決我在 haproxy 中以 tcp 模式轉發客戶端 IP 地址的問題。任何幫助表示讚賞。

您應該listen 443 ssl proxy_protocol;在 nginx 端使用並send_proxy在 Haproxy 端使用指令。

在 Nginx 中使用代理協議

Haproxy 文件

從 HAProxy 發送 PROXY 協議頭

我的工作配置HA端:

# USED FOR some_service
frontend  some_service_https
 mode tcp
 bind *:443
 option tcplog
 option forwardfor
 default_backend some_service_https

backend some_service_https
 balance roundrobin
 stick-table type ip size 1m expire 1h
 stick on src
 server some_service 192.168.1.2:443 send-proxy check

和 NGINX 方面:

set_real_ip_from 192.168.1.1; # HAproxy local IP
set_real_ip_from 183.55.111.30; # HAproxy external IP
real_ip_header proxy_protocol; # proxy_protocol needed
real_ip_recursive on;

upstream some_service {
 server unix:/tmp/unicorn.some_service.sock fail_timeout=0;
}

server {
 server_name some_service.myserver.com some_service_1.myserver.com;
 listen 443 proxy_protocol; # proxy_protocol needed
 root /opt/apps/some_service/current/public;
 add_header X-Whom some_service_1.myserver.com;

不要忘記在 HA 後端和 real_ip_header proxy_protocol 上添加“send-proxy”,並將 proxy_protocol 監聽到 NGINX。即使您使用 80 或 443 埠或兩者都可以使用。

引用自:https://serverfault.com/questions/867864