如何从AWS Lambda Function URL获取客户端IPv4地址?
问题分析与解决
为什么只获取到IPv6地址
你的设备同时支持IPv4和IPv6,但现代浏览器/操作系统在双栈网络环境下会优先选择IPv6链路发起请求。当你访问Lambda Function URL时,客户端实际是通过IPv6连接的,所以Lambda收到的请求源IP自然只有IPv6地址——整个请求链路从始至终都是IPv6协议,不会携带IPv4相关信息。
解决方案
1. 强制客户端使用IPv4访问
如果需要测试IPv4地址的获取,可通过以下方式强制客户端走IPv4链路:
- 修改本地hosts文件,将Lambda Function URL的域名映射到对应的IPv4地址(可通过
nslookup <你的Lambda URL域名>获取其IPv4地址) - 使用支持强制IPv4的工具或浏览器插件发起请求
2. 服务端双栈兼容说明
Lambda Function URL本身默认支持双栈访问,无需额外配置。只要客户端通过IPv4发起请求,x-forwarded-for和sourceIp字段就会返回对应的IPv4地址。
3. 验证客户端连接协议
你可以在客户端确认请求实际使用的协议:
- 打开浏览器开发者工具的「网络」面板,查看请求的「远程地址」,如果是IPv6格式(如
[2600:1f18:446c:xxxx:xxxx]),说明确实是通过IPv6连接的。
附:优化后的测试代码(更易查看IP信息):
import json def lambda_handler(event, context): return { 'statusCode': 200, 'body': json.dumps({ 'x-forwarded-for': event['headers'].get('x-forwarded-for'), 'sourceIp': event['requestContext']['http']['sourceIp'] }) }
内容的提问来源于stack exchange,提问作者maurera
相关产品推荐
相关产品推荐

