文章目录
前言
在使用Nginx作为反向代理服务器时,获取客户端的真实IP地址是一个常见的需求。由于Nginx默认情况下只能看到直接与其建立连接的代理服务器的IP地址,而不是客户端的真实IP,因此需要通过配置来获取真实的客户端IP。以下是获取真实IP地址的策略,包括配置示例和参数说明。
1.工作原理
Nginx获取真实IP地址的工作原理主要依赖于HTTP头部信息,特别是X-Forwarded-For
或X-Real-IP
头部。当客户端请求通过一个或多个代理服务器时,每个代理服务器都会在请求头部添加或更新这些字段,以保留客户端的真实IP地址。Nginx通过配置可以使用这些头部信息来确定客户端的真实IP。
关键配置指令
- real_ip_header:指定Nginx应该从哪个HTTP头部字段获取客户端的真实IP地址。默认是
X-Real-IP
,但更常用的是X-Forwarded-For
。 - set_real_ip_from:定义了哪些IP地址或IP地址段是可信的,即Nginx认为这些代理服务器会发送真实的客户端IP地址。
- real_ip_recursive:决定Nginx是否递归地处理多个代理服务器的情况。如果启用,Nginx会从右到左检查
X-Forwarded-For
头部中的IP地址,直到找到一个不在set_real_ip_from
指定的IP地址段中的IP地址,将其视为客户端的真实IP。
2. 示意图
以下是Nginx获取真实IP地址的工作流程示意图:
+--------+ 请求 +----+ +----+ +--------+
| 客户端 | <----------> | 代理1 | | 代理2 | | Nginx |
+--------+ +----+ +----+ +--------+
^ | |
| | |
+-----------------------+------------+
X-Forwarded-For头部
- 客户端向代理1发送请求,代理1在请求头部添加
X-Forwarded-For: 客户端IP
。 - 代理1将请求转发给代理2,并在
X-Forwarded-For
头部追加自己的IP,形成X-Forwarded-For: 客户端IP, 代理1IP
。 - 代理2将请求转发给Nginx,并在
X-Forwarded-For
头部追加自己的IP,形成X-Forwarded-For: 客户端IP, 代理1IP, 代理2IP
。 - Nginx通过配置
real_ip_header X-Forwarded-For;
和set_real_ip_from
指令,识别出客户端的真实IP。
3. 配置Nginx获取客户端真实IP
基本配置说明
为了确保Nginx能够正确解析来自上游代理或负载均衡器的X-Forwarded