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

代码如上。

相关推荐
xixingzhe27 小时前
SpringBoot + Nginx 免鉴权接口安全防护方案
运维·nginx·安全
笑锝没心没肺8 小时前
fail2ban工具安装配置及使用
linux·运维·服务器
zt1985q10 小时前
本地部署开源智能家居集成平台 ioBroker 并实现外部访问( Windows 版本)
运维·服务器·智能家居
心心喵11 小时前
[linux] nohup和pm2的区别 进程保活
linux·运维·服务器
酷炫的水壶15 小时前
使用memc-nginx和srcache-nginx模块构建高效透明的缓存机制
运维·nginx·缓存
范什么特西16 小时前
网络代理问题
java·linux·服务器
utf8mb4安全女神17 小时前
【Redis数据库】哨兵集群/redis集群/安装配置/主从复制/数据持久化操作/数据结构/安全限制/PHP redis/
linux·服务器·数据结构·数据库·redis·缓存
智商偏低17 小时前
Windows Nginx 完整安装 + 启动教程
运维·nginx
Let's Chat Coding17 小时前
对称密钥认证:主机和设备共享同一把密钥
运维·服务器·网络
写代码的学渣18 小时前
Linux 安装 Swap 交换分区大小标准(通用 + 生产服务器 + 个人 PC)
linux·运维·服务器