You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx反向代理下Gin框架无法获取访客真实IP问题求助

Nginx + Gin 无法获取访客真实IP问题排查与解决

一、Nginx配置修正

你的现有配置已添加X-Real-IP和X-Forwarded-For头,但set_real_ip_from需配合real_ip_header才能生效,且配置位置需调整。修正后的完整配置如下:

upstream fc {
    server 127.0.0.1:9004;
}

server {
    server_name somesubdomain.somedomain.com www.somesubdomain.somedomain.com;

    # 配置真实IP解析规则,信任所有代理(生产环境建议限制为已知代理IP段)
    set_real_ip_from 0.0.0.0/0;
    real_ip_header X-Forwarded-For;
    # 若优先依赖X-Real-IP,可替换为 real_ip_header X-Real-IP;

    location / {
        proxy_pass http://fc; # 复用upstream配置,提升可维护性
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme; # 涉及HTTPS时需添加,确保协议识别正确
    }
}

关键说明:

  • set_real_ip_from 0.0.0.0/0 表示信任所有来源的代理请求,生产环境建议替换为Nginx代理服务器的实际IP或IP段,降低安全风险。
  • real_ip_header 指定Nginx从哪个请求头提取真实IP,使用X-Forwarded-For时会自动取该头中的第一个有效非代理IP。

二、Gin框架代码调整

Gin 1.7+版本默认启用安全模式,不会自动解析X-Forwarded-For或X-Real-IP头,需手动设置信任的代理IP段,让ClientIP()方法正确获取真实IP:

package main

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

func main() {
    r := gin.Default()

    // 设置信任的代理IP段,此处为本地回环地址(适配Nginx与Gin同服务器场景)
    if err := r.SetTrustedProxies([]string{"127.0.0.1/32"}); err != nil {
        panic(err)
    }

    r.GET("/ip", func(c *gin.Context) {
        // c.ClientIP()会自动解析X-Forwarded-For/X-Real-IP,返回真实访客IP
        realIP := c.ClientIP()
        c.JSON(http.StatusOK, gin.H{
            "real_ip": realIP,
        })
    })

    r.Run(":9004")
}

关键说明:

  • SetTrustedProxies 指定信任的代理IP,只有来自这些IP的请求,Gin才会解析X-Forwarded-For等头。若Nginx与Gin不在同一服务器,需替换为Nginx的公网/内网IP段。
  • 避免直接读取X-Forwarded-For原始值(多级代理场景下该头包含多个IP),c.ClientIP()会自动处理并返回第一个有效访客IP。

三、验证方法

重启Nginx和Gin服务后,用curl模拟请求测试:

curl -H "X-Forwarded-For: 192.168.1.100" http://somesubdomain.somedomain.com/ip

返回结果若包含"real_ip": "192.168.1.100",则说明配置生效。

内容的提问来源于stack exchange,提问作者Meehow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 06:10:19