haproxy和nginx之间传递remote_ip

haproxy在mode http的下面加入参数

option forwarder

nginx在日志格式中加入下面

$http_x_forward_for
### 如何实现 `extend_xff` 功能 #### 使用场景 `extend_xff` 主要用于Web应用程序中,特别是在反向代理服务器(如NginxHAProxy应用服务器之间传递客户端的真实IP地址。当请求通过多个代理层时,原始X-Forwarded-For (XFF)头可能无法携带完整的转发链信息。此时,`extend_xff`功能可以扩展现有的XFF头部,确保每一级代理都能正确记录并追加其接收到的客户端IP。 #### 实现方法 为了实现这一特性,在每个中间件或框架层面都需要对接收HTTP请求的地方做适当修改: 1. **获取现有 XFF 头部** 2. **提取远程 IP 地址** 3. **更新 XFF 头部** 以下是Python Flask框架中的一个简单示例,展示如何在Flask应用里实现此逻辑: ```python from flask import request, Request class ExtendedRequest(Request): @property def extended_xff(self): forwarded_for = self.headers.get('X-Forwarded-For') remote_addr = self.remote_addr if not forwarded_for: return remote_addr ips = [ip.strip() for ip in forwarded_for.split(',')] # 防止伪造XFF攻击,仅信任配置好的代理列表内的IP trusted_proxies = {'192.0.2.1', '198.51.100.1'} while ips and ips[-1] in trusted_proxies: del ips[-1] ips.append(remote_addr) new_forwarded_for = ', '.join(ips) return new_forwarded_for app = Flask(__name__) app.request_class = ExtendedRequest @app.route('/') def index(): xff_header = request.extended_xff return f'Extended XFF Header: {xff_header}' ``` 在此代码片段中,自定义了一个继承自原生`flask.Request`类的新类`ExtendedRequest`,并通过重载属性访问器的方式实现了对传入请求对象的增强[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值