将Real Client IP从Nginx转发到Haproxy

时间:2019-02-12 12:31:08

标签: nginx haproxy

我的切入点是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设置速率限制。请让我知道正确的做法。

1 个答案:

答案 0 :(得分:0)

当您从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

此配置对我来说很好! 问候