使用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 地址。二、调试与测试。

  1. 为确保正确的配置󿀌我们可以用一个简单的调试日志来测试。

    X-Forwarded-For。 头部内容。添加调试日志。

    可通过以下配置,将。X-Forwarded-For。

    头部记录在专门的调试日志文件中。

    调试日志配置。 log_format debug '$http_x_forwarded_for';access_log /path/to/log/debug.log debug;

  2. 通过这个配置�您可以在调试过程中直接查看。

    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;