我的切入点是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设置速率限制。请让我知道正确的做法。
答案 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
此配置对我来说很好! 问候