【问题标题】:Forward Real Client IP from Nginx to Haproxy将真实客户端 IP 从 Nginx 转发到 Haproxy
【发布时间】:2019-02-12 12:31:08
【问题描述】:

我的切入点是 Nginx。对于所有 /api 请求,我已经设置了 haproxy。当有人试图点击https://yourdomain.com/api/ 时,我想将客户端 IP 地址从 nginx 发送到 haproxy。我已经为 /api 定义了一个位置并定义了以下标题

location /api/ {
           proxy_pass https://MY-API-URL/;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_pass_request_headers      on;
}

当我得到 X-Real-IP 的值时,它是客户端 IP,但我希望这个客户端 IP 存在于 Haproxy 中,因为我想根据客户端 IP 设置速率限制。请告诉我什么是正确的做法。

【问题讨论】:

    标签: nginx haproxy


    【解决方案1】:

    当您从 NGginx 代理到 Haproxy 时,所有连接都来自同一个 ip/机器 (nginx)。 如果您想基于客户端的 IP 进行代理,那么您必须告诉 HAProxy 根据您在 Nginx 中设置的 X-Real-IP 或 X-Forwarded-For 标头进行平衡。

    您的新 Nginx 配置如下所示:

    location /{
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ( if use X-Forwarded-For )
                proxy_set_header X-Forwarded-Proto https;
                proxy_set_header X-Real-IP $remote_addr; ( if use X-Real-IP )
                proxy_pass_request_headers on;
                proxy_pass http://myip:myport;
    
    }
    

    如果您使用 X-Real-IP,您的新 HAProxy 配置将如下所示:

    backend webapp
      balance hdr(X-Real-IP)
      hash-type consistent 
      mode http
      server server1 ip:port check port 8080
      server server2 ip:port check port 8080
    

    如果您使用 X-Forwarded-For,您的新 HAProxy 配置将如下所示:

    backend webapp
      balance hdr(X-Forwarded-For)
      hash-type consistent 
      mode http
      server server1 ip:port check port 8080
      server server2 ip:port check port 8080
    

    这个配置对我来说很好用! 问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-05
      • 1970-01-01
      • 1970-01-01
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      • 2020-11-25
      相关资源
      最近更新 更多