ZBLOG

Nginx转发至上游服务器时,IP时Nginx的地址还是客户端的地址

在 Nginx 转发请求至上游服务器时,默认情况下,上游服务器看到的客户端 IP 地址是 Nginx 服务器的 IP 地址,而不是实际客户端的 IP 地址。这是因为 Nginx 作为反向代理,接收来自客户端的请求后,再将其转发到上游服务器。

获取客户端真实 IP

为了让上游服务器能够获取真实的客户端 IP,Nginx 提供了几种方式。最常用的方法是使用 X-Real-IPX-Forwarded-For HTTP 头。以下是如何配置以确保上游服务器接收到正确的客户端 IP 地址:

  1. 使用 proxy_set_header 配置:

在你的 Nginx 配置中,可以添加以下行来传递真实客户端 IP 给上游服务器:

  1. location / {
  2. proxy_pass http://upstream_server;
  3. proxy_set_header Host $host;
  4. proxy_set_header X-Real-IP $remote_addr;
  5. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  6. }
  • $remote_addr: 表示原始请求中的客户端地址。
  • $proxy_add_x_forwarded_for: 会将当前客户端的 IP 添加到 X-Forwarded-For 头中,如果已经存在,则会保留之前的信息,并在其后附加新的 IP。
  1. 在上游服务器中处理这些头信息:

上游应用(如 Web 应用、API 等)需要处理 X-Real-IPX-Forwarded-For 头,以获取真实的客户端地址。

注意事项

  1. 安全性:由于这些 HTTP 头可以被伪造,因此在信任这些头信息之前,你应该确认只允许可信来源(如负载均衡器或反向代理)来传递它们。

  2. 多级代理:如果你有多个层次的代理(例如,一个 CDN 前面还有一个反向代理),你可能还需要考虑如何管理这些层次中的每一个。

  3. IP 植入与私有网络:如果 Nginx 与上游之间是在同一网络内,且没有外部访问,请求仍然会经过 Nginx,但实际上可能会显示内部地址而非公共地址。

通过适当配置和理解这些机制,可以有效地获取并利用客户机的真实 IP 信息。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=22226

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?