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

AWS EC2+ALB环境下Gin框架可信代理配置方案咨询

在AWS ALB+EC2环境下正确配置Gin可信代理的方案

首先明确:不要信任所有代理,哪怕EC2无公网访问,仍有潜在风险(比如VPC内其他服务恶意构造X-Forwarded-For头,导致客户端IP解析错误,影响日志、权限校验等逻辑)。

正确配置步骤

Gin要求可信代理是具体的IP/CIDR,而ALB向EC2发起请求时使用的是其所在VPC子网的私有IP,所以你只需要将EC2所在VPC的私有IP段(或ALB目标组对应的子网CIDR)配置为可信代理即可:

  1. 获取VPC/子网CIDR:登录AWS控制台,找到你的EC2实例所在VPC,查看其私有IP段(比如10.0.0.0/16、172.31.0.0/16这类);如果ALB只使用特定子网,也可以只用那些子网的CIDR。
  2. 配置Gin的可信代理:在初始化Gin引擎时调用SetTrustedProxies传入这些CIDR:
package main

import (
    "log"
    "github.com/gin-gonic/gin"
)

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

    // 替换为你的VPC/ALB子网的CIDR列表
    trustedProxies := []string{"10.0.0.0/16", "172.31.0.0/16"}
    if err := r.SetTrustedProxies(trustedProxies); err != nil {
        log.Fatalf("Failed to configure trusted proxies: %v", err)
    }

    // 测试接口,验证客户端IP
    r.GET("/ip", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "client_ip": c.ClientIP(),
            "x_forwarded_for": c.Request.Header.Get("X-Forwarded-For"),
        })
    })

    r.Run(":8080")
}

为什么这个方案可行?

  • 你的EC2无直接公网访问,所有外部请求都必须经过ALB,而ALB的后端请求IP必然属于VPC的私有子网范围。
  • 将这些CIDR设为可信后,Gin会自动信任来自这些IP的X-Forwarded-For头,解析出真实的客户端IP(c.ClientIP()会返回X-Forwarded-For中的第一个有效IP)。

其他方案的排除理由

  • 信任所有代理(SetTrustedProxies([]string{"*"})):即使EC2无公网,VPC内若有其他服务(比如内部测试工具、其他应用),恶意构造X-Forwarded-For会导致IP解析错误,存在安全隐患。
  • 使用Global Accelerator:GA提供的是固定入口IP,但Gin收到的请求来自ALB的私有IP,不是GA的入口IP,所以这个方案对配置可信代理毫无帮助,纯粹增加复杂度。
  • SetTrustedPlatform():ALB已经使用标准的X-Forwarded-For头,该配置用于自定义非标准的客户端IP头,完全冗余。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:01:30