使用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, ' ' );
        }

代码如上。

相关推荐
南京码讯光电技术有限公司32 分钟前
工业无线AP选型指南:从WiFi 5到WiFi 6+5G CPE,如何构建全覆盖、零漫游、高可靠的智能工厂网络?
服务器·网络·5g
二宝哥1 小时前
Linux虚拟机网络配置
linux·运维·服务器
陳10302 小时前
Linux:进程间通信 和 简单进程池
linux·运维·服务器
jimy12 小时前
改.bashrc,直观地判断本地repo是否有改动
linux·服务器
zt1985q2 小时前
本地部署网页监控工具 Webmonitor 并实现外部访问
运维·服务器·网络·网络协议
匆匆那年9673 小时前
远程 Linux 校园网认证操作手册(本地浏览器法)
linux·运维·服务器
dog2503 小时前
为何新增网络路径反而引入额外时延
服务器·网络·php
newnazi3 小时前
RedHat10 安装MS SQL Server2025
linux·服务器·数据库
QuestLab4 小时前
③-进阶篇:vLLM实战——多卡部署、压测与排障
linux·服务器·网络
HEADKON5 小时前
培西达替尼Pexidartinib对比伊马替尼在腱鞘巨细胞瘤中的CSF1R抑制与肝毒性风险
nginx