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

代码如上。

相关推荐
热爱嵌入式的小许5 小时前
Linux基础项目开发1:量产工具——显示系统
linux·运维·服务器·韦东山量产工具
小堃学编程5 小时前
计算机网络(十) —— IP协议详解,理解运营商和全球网络
网络·tcp/ip·计算机网络
小鹿( ﹡ˆoˆ﹡ )8 小时前
探索IP协议的神秘面纱:Python中的网络通信
python·tcp/ip·php
韩楚风9 小时前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
陈苏同学9 小时前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
Pythonliu79 小时前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
我是哈哈hh10 小时前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝
郭二哈10 小时前
C++——模板进阶、继承
java·服务器·c++
挥剑决浮云 -10 小时前
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
linux·服务器·c语言·c++·经验分享·笔记
立秋678910 小时前
Python的defaultdict详解
服务器·windows·python