「HAProxy」- 在 TCP Mode 下,从 Haproxy 向 Nginx 传递客户端真实网络地址 @20210130

在HAProxy和Nginx中实现客户端真实IP地址传递

问题描述

客户端 Client 访问对外开放的 HAProxy 服务,然后由 HAProxy 负责负载均衡,来向后端的 Nginx 服务转发流量。如图:
diagram.png

但是,从 Nginx 获取到的 IP 地址为 HAProxy 的IP地址,而不是客户端 Client 的真实 IP 地址。

该笔记将记录:在 HAProxy + Nginx 中,如何获取客户端的真实网络地址(Real IP Address)

系统环境

CentOS 7.0,三台机器:172.31.255.112(Clint);172.31.255.13(HAProxy);172.31.255.125(Nginx-00);

Nginx 1.14.0

HAProxy 1.5.18,在TCP模式下的负载均衡。当然也可以使用HTTP模式,但是效率低啊,我们要用TCP模式。(“使用HTTP效率低”完全是基于“TCP是四层的,而HTTP是七层的”进行的推断)

解决方案

官方已经给出解决方案,参考

HAProxyNginx都是优秀的负载均衡工具,但它们在设计目标、适用场景和功能特性上有显著区别,以下是两者的详细对比: ### 核心定位 - **主要角色**:HAProxy是专业的负载均衡器/代理,而Nginx是Web服务器 + 反向代理/负载均衡[^2]。 - **设计初衷**:HAProxy旨在实现高性能流量分发,Nginx则侧重于高并发HTTP服务[^2]。 - **协议支持**:HAProxy支持TCP/HTTP/SSL(L4 & L7),Nginx主要支持HTTP/HTTPS(L7),对TCP的支持有限[^2]。 ### 性能对比 - **连接处理**:HAProxy更擅长处理高并发长连接,如数据库、MQ;Nginx擅长短连接HTTP请求[^2]。 - **资源消耗**:在纯转发场景下,HAProxy内存占用更低;Nginx由于需要处理动态内容,资源消耗相对较高[^2]。 - **吞吐量**:在纯负载均衡场景中,HAProxy吞吐量更高;Nginx兼顾Web服务,吞吐量稍低[^2]。 ### 适用场景 如果需要一个高性能的负载均衡器来处理大量的并发请求,并且不需要太多额外的功能,那么HAProxy可能是更好的选择。如果需要一个功能丰富的反向代理和Web服务器,那么Nginx更适合。在某些情况下,也可能将两者结合使用,例如,使用Nginx作为前端的反向代理和静态文件服务器,同时使用HAProxy进行后端的负载均衡[^1]。 ### 示例配置 #### HAProxy配置示例 ```plaintext global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners stats timeout 30s user haproxy group haproxy daemon defaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 frontend http_front bind *:80 default_backend http_back backend http_back balance roundrobin server web1 192.168.1.100:80 check server web2 192.168.1.101:80 check ``` #### Nginx配置示例 ```nginx http { upstream backend { server 192.168.1.100; server 192.168.1.101; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值