使用Nginx获取客户端的真实IPIP(real
发布时间:2025-06-24 17:26:52 作者:北方职教升学中心 阅读量:411
使用 Nginx 获取客户端真实性 IP。
在使用 Nginx 作为反向代理或负载平衡器时,我们经常需要获得客户端的真实性 IP 地址。但是,默认情况下Nginx 的。 $remote_addr。
变量记录的 IP 地址可能是上游代理或负载平衡器 IP,而不是实际客户端 IP。为了确保我们能够正确地获得和记录客户端的真实性 IP,本文将介绍如何配置 Nginx,并进行调试。
一、配置 Nginx 获取客户端真实性 IP。
1、基本配置说明。
首先,我们需要保证 Nginx 上游代理或负载均衡器可以正确分析。 X-Forwarded-For。
头部信息。通过配置。 real_ip_header。
和。 set_real_ip_from。
,Nginx 可以将。 $remote_addr。
更新客户端的真实性 IP。
示例配置。:
http { include mime.types; default_type application/octet-stream; server_tokens off; # 设置真实 IP 的头部信息 real_ip_header X-Forwarded-For; # 指定可靠的上游代理 IP 范围,这里以 172.0.0.0/8 例如(即负载均衡的ip网段) set_real_ip_from 172.0.0.0/8; # 其他配置 ...}。
real_ip_header X-Forwarded-For;
:指定从哪个头获取客户端的真实性 IP 地址。real_ip_header X-Forwarded-For;
:指定从哪个头获取客户端的真实性 IP 地址。常见的头包括。X-Forwarded-For。
、。X-Real-IP。
等。set_real_ip_from 172.0.0.0/8;
:指定哪些 IP 可以信任地址段的请求。如果请求来自这些地址段那么 Nginx 会根据。real_ip_header。
配置更新。
$remote_addr。。
在 Nginx 中, set_real_ip_from。
哪些指令用于定义 IP 地址或 IP 地址段值得信赖。根据要求来源 IP 地址是否在。
set_real_ip_from。
在指定范围内,Nginx 行为会有所不同,具体区别如下: 2、set_real_ip_from详解。
1. 请求来源 IP 在。
set_real_ip_from。 范围内。
如果请求来源 IP 地址在。 set_real_ip_from。
在指定范围内,Nginx 会信任请求,并使用。 real_ip_header。
指定头部(如。
X-Forwarded-For。
- )作为客户端的真实值 IP 地址。
行为:。
Nginx 使用。X-Forwarded-For。
头部的第一个(最左边)IP 地址作为。 - $remote_addr。
(也就是客户端的真实性 IP 地址)。
这种情况通常发生在负载平衡器或反向代理服务器的前端,它们会被添加。
X-Forwarded-For。 首先,指示真正的客户端 IP。
2. 请求来源 IP 不在。
set_real_ip_from。范围内。如果请求来源 IP 地址。
不在。 set_real_ip_from。
在指定范围内,Nginx 这个请求中不会信任。
X-Forwarded-For。
- 头部中的 IP 地址。
行为:。
Nginx 请求来源的直接使用 IP 地址(即。 - $remote_addr。
)作为客户端 IP 地址。
这意味着 Nginx 负载平衡器或代理服务器将使用 IP 地址被视为客户端 IP,而不是考虑。
X-Forwarded-For。
头中的值。场景分析:
范围内:
如果你有负载平衡器在到达之前,所有的请求都将首先通过它 Nginx。负载均衡器将添加到请求头中。X-Forwarded-For。
记录客户端的真实性 IP。如果您将负载均衡器 IP 地址配置在。set_real_ip_from。
中间,Nginx 阅读和信任。X-Forwarded-For。客户端真实 IP。
不在范围内:
如果请求不是通过你信任的负载平衡器发送的(可能是直接访问 Nginx,或来自不可信的代理服务器),Nginx 这个请求会被认为是。
X-Forwarded-For。
不可信,因此,使用实际请求来源 IP(负载均衡器或代理 IP 地址)作为客户端 IP。 3、log_format 配置(参考)
配置日志格式时,可直接使用。 $remote_addr。
变量。Nginx 在解析。 real_ip_header。
后,会自动将。
$remote_addr。分析后的真实性被替换 IP 地址。
日志格式配置。
:
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';$remote_addr。
:在配置了。
:在配置了。
real_ip_header。 之后,这个变量将代表客户端的真实性 IP 地址。
二、调试与测试。
为确保正确的配置我们可以用一个简单的调试日志来测试。
X-Forwarded-For。
头部内容。
添加调试日志。可通过以下配置,将。X-Forwarded-For。
头部记录在专门的调试日志文件中。
调试日志配置。
:
log_format debug '$http_x_forwarded_for';access_log /path/to/log/debug.log debug;通过这个配置您可以在调试过程中直接查看。
X-Forwarded-For。
头部内容,确认它是否包含客户端的真实性 IP 地址。
检查调试日志。配置完成后重启 Nginx,并通过访问应用程序生成一些日志。然后,查看调试日志。
/path/to/log/debug.log。以验证。X-Forwarded-For。头部的值。
tail。
-f。
/path/to/log/debug.log。
如果。
X-Forwarded-For。 头部包含了客户端的真实性 IP 地址,然后说明配置正确Nginx 能够正确获取和记录客户端的真实性 IP。
三、Lua 使用客户端是真实的 IP(参考)
在实际应用中c;假如你用了 OpenResty 或 Nginx 的 Lua 模块,可以在 Lua 使用代码。ngx.var.remote_addr。
获得分析后的真实性 IP。示例代码。: access_by_lua "local。uid。=ngx。.。var。.。cookie_bb_id。 if。not。 uid。then。uid。=ngx。.。md5。(。ngx。.。now。(。)。..。ngx。.。 var。.。remote_addr。..。ngx。.。var。.。http_user_agent。)。ngx。.。header。[。'Set-Cookie']。= 'bb_id='..。uid。..。'; path=/; Expires='..。ngx。.。cookie_time。(。ngx。.。time。(。)。+3650。*。86400。)。..。'; Secure; SameSite=None'
end。"
;
在上面的 Lua 代码c;
ngx.var.remote_addr。 分析后的客户端将获得真实性 IP。这在用户跟踪或日志记录中非常有用。
四、总结。 通过正确的配置。
real_ip_header。 和。
set_real_ip_from。 ,我们可以保证 Nginx 能够通过。
$remote_addr。
获取并记录客户端的真实性 IP 地址。配置完成后,配置是否生效可以通过调试日志进行验证。如果你在 Lua 需要获得真理 IP,可直接使用。
ngx.var.remote_addr。。本博客介绍了如何配置、调试和验证 Nginx 的真实 IP 获取配置希望对你有所帮助。如果在实际操作中遇到其他问题,欢迎进一步探讨#xff01;