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

在Go语言AWS Lambda函数中获取请求者IP地址的方法

在Go语言AWS Lambda函数中获取调用者IP地址的方法

首先纠正一个误解:context.Context 并不包含请求头或调用者IP这类请求相关信息,这些数据需要从Lambda的事件结构体中获取,具体取决于触发Lambda的服务(比如API Gateway、ALB等)。

以下是常见场景的实现方式:

1. API Gateway(REST/HTTP API)触发

如果你的Lambda由API Gateway触发,需要使用github.com/aws/aws-lambda-go/events包中的对应事件结构体作为参数:

REST API示例代码

package main

import (
	"context"
	"fmt"

	"github.com/aws/aws-lambda-go/events"
	"github.com/aws/aws-lambda-go/lambda"
)

func handler(ctx context.Context, req events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
	// 从请求头中获取X-Forwarded-For
	clientIP := req.Headers["X-Forwarded-For"]
	// 若头字段不存在,从RequestContext中取SourceIP作为备选
	if clientIP == "" {
		clientIP = req.RequestContext.Identity.SourceIP
	}

	return events.APIGatewayProxyResponse{
		StatusCode: 200,
		Body:       fmt.Sprintf("Client IP: %s", clientIP),
	}, nil
}

func main() {
	lambda.Start(handler)
}

HTTP API示例代码

HTTP API的事件结构体头字段为小写格式:

func handler(ctx context.Context, req events.APIGatewayV2HTTPRequest) (events.APIGatewayV2HTTPResponse, error) {
	clientIP := req.Headers["x-forwarded-for"]
	if clientIP == "" {
		clientIP = req.RequestContext.HTTP.SourceIP
	}

	return events.APIGatewayV2HTTPResponse{
		StatusCode: 200,
		Body:       fmt.Sprintf("Client IP: %s", clientIP),
	}, nil
}

2. Application Load Balancer(ALB)触发

如果是ALB触发的Lambda,使用ALBTargetGroupRequest事件结构体:

func handler(ctx context.Context, req events.ALBTargetGroupRequest) (events.ALBTargetGroupResponse, error) {
	clientIP := req.Headers["X-Forwarded-For"]
	if clientIP == "" {
		clientIP = req.RequestContext.Identity.SourceIP
	}

	return events.ALBTargetGroupResponse{
		StatusCode: 200,
		Body:       fmt.Sprintf("Client IP: %s", clientIP),
	}, nil
}

关键注意事项

  • 不同触发服务的事件结构体格式不同,必须匹配正确的事件类型才能获取请求头。
  • X-Forwarded-For可能包含多个IP(格式为客户端IP, 代理IP1, 代理IP2...),通常第一个IP就是真实客户端IP。
  • 若直接通过Lambda控制台测试或非代理方式触发,X-Forwarded-For可能不存在,此时可从事件的RequestContext中获取SourceIP作为备选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 02:20:45