Loading... ### 引言 在使用 Nginx 作为负载均衡,反向代理服务器时,后端服务只能看到 Nginx 服务器的地址,不能看到真实的客户端IP,在Nginx 中有一个名为 `X-Forward-For` 的 `Header`,通常用于传递客户端的IP地址,但是这种方式存在一些安全问题,`X-Forwarded-For` 头信息可以被恶意用户伪造,从而绕过基于IP的访问限制,本文会将详细介绍如何在Nginx中配置,获取真实的客户端IP 地址,防止IP伪造,并确保后端能够获取到真实的客户端IP ### X-Forwarded-For 当我们使用Nginx 获取客户端 真实IP地址时,我们一般会使用此方法 ```nginx proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ``` 然后后端可以通过读取 Header 中的 X-Forwarded-For,获取客户端 IP 地址,但是 这个 Header是由客户端直接提供的,而且可能包含多个代理服务器的地址,这种情况可能会导致绕过基于IP地址的访问限制,记录错误的客户端IP地址,影响日志审计以及分析。 ### 解决方法 使用 X-Real-IP `X-Real-IP`是 Nginx 设置的头信息,专门用于传递真实的客户端IP 地址,与`X-Forwarded-For` 不同的是,`X-Real-IP` 是由 Nginx 内部生成的,且客户端无法进行修改。 #### 配置教程 在 Nginx 的配置文件中 增加如下配置 ```nginx proxy_set_header X-Real-IP $remote_addr; # 传递真实的客户端IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 追加转发链 ``` 在日志格式中追加 `$http_x_forwarded_for` ```nginx log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" "$http3"'; ``` 重启Nginx即可。 原理图  Last modification:April 28, 2025 © Allow specification reprint Support Appreciate the author Like 如果觉得我的文章对你有用,请随意赞赏
One comment
test