使用EO和nginx之后,服务器如何获取客户端真实IP地址

之前一直在使用nginx传递的 X-Real-IP 来获取客户端的真实地址,增加了EO之后,一天突然发现服务器获取到的客户端地址好像有问题,检查了一下,发现 X-Real-IP 传递回来的是EO的服务器地址,不是客户端的真实IP地址,在网上搜索了一下,对X-Real-IP的描述如下:

从字面看 X-Real-IP 代表的是客户端请求真实的 IP 地址,这个参数没有相关标准规范,如果是直接访问的请求,可能是客户端真实的 IP 地址,但是中间若经过了层层的代理,就是最后一层代理的 IP 地址。

也就是说,这个header并没有一个明确的规范来约束,而返回的也可能是代理服务器的地址,如果要获取真实的客户端地址,可以用下面的方法:

复制代码
X-Forwarded-For: <client>, <proxy1>, <proxy2>

X-Forwarded-For 记录着从客户端发起请求后访问过的每一个 IP 地址,第一个是发起请求的客户端本身的地址,各 IP 地址间由"英文逗号+空格"(,)分隔。

那么,只需要获取 X-Forwarded-For 这个头,并且用逗号来拆分字符串,第一个子串就是客户端的 IP 地址。

cpp 复制代码
        a_string chain = request.Header()["X-Forwarded-For"];
        
        CStringArray splite;
        Splite( chain, ',', splite );

        a_string real;
        if( splite.empty() == false ) {
            real = splite.front(); Trim( real, ' ' );
        }

代码如上。

相关推荐
槿花Hibiscus几秒前
C++基础:session实现和http server类最终组装
服务器·c++·http·muduo
倔强的小石头_1 分钟前
Python 从入门到实战(六):字典(关联数据的 “高效管家”)
java·服务器·python
阿海5747 分钟前
安装nginx1.29.3的shell脚本命令
linux·nginx
@YDWLCloud20 分钟前
出海 APP 如何降低延迟?腾讯云国际版 GME 音视频深度评测
大数据·服务器·云计算·音视频·腾讯云
九河云24 分钟前
华为云 ModelArts 赋能 AI 开发:从模型训练到边缘部署的全流程优化实践
服务器·人工智能·华为云·云计算
ICT技术最前线35 分钟前
电信宽带怎么申请公网ip?企业组网避坑指南
网络·网络协议·tcp/ip·电信宽带
gaize12131 小时前
服务器全套知识科普
服务器
wadesir1 小时前
Linux文件系统创建(从零开始构建你的存储空间)
linux·运维·服务器
柯南二号1 小时前
【后端】【Java】可直接落地的 Nginx + Java(Spring Boot)+ Redis 的短链系统实现
java·spring boot·nginx
嵌入式小能手1 小时前
飞凌嵌入式ElfBoard-文件I/O的深入学习之I/O多路复用
linux·服务器·学习