CDK部署AWS API Gateway请求路径丢失致后端404问题
解决API Gateway HTTP代理到NLB时路径丢失的404问题
问题背景
部署架构为:API GW(REST API)→ VPC LINK → NLB → 监听器/目标组 → ECS服务 → EC2容器实例。所有组件健康状态正常,直接调用NLB的/my_method/{param}路径可正常响应,但通过API Gateway测试时,后端uvicorn服务器收到的请求路径为/,返回404错误。
当前CDK集成配置如下:
vpc_integration = apigateway.Integration( type=apigateway.IntegrationType.HTTP_PROXY, integration_http_method=HttpMethods.ANY, options=apigateway.IntegrationOptions( connection_type=apigateway.ConnectionType.VPC_LINK, vpc_link=link ), )
核心原因
API Gateway的HTTP_PROXY集成默认不会自动将完整请求路径传递给后端服务,若未明确配置路径映射规则,只会将根路径/转发给后端。
解决方案
修改CDK集成配置,补充路径传递的关键配置:
修改后的集成代码
vpc_integration = apigateway.Integration( type=apigateway.IntegrationType.HTTP_PROXY, integration_http_method=HttpMethods.ANY, # 追加${request.path}以传递完整请求路径到NLB uri=f"http://{你的NLB_DNS地址}/${{request.path}}", options=apigateway.IntegrationOptions( connection_type=apigateway.ConnectionType.VPC_LINK, vpc_link=link, # 映射路径参数到集成请求 request_parameters={ "integration.request.path.param": "method.request.path.param" } ), )
关键配置说明
- URI路径追加:在NLB的DNS地址后添加
/${request.path},API Gateway会将当前请求的完整路径(如/my_method/123)拼接在NLB地址后,转发给后端服务。 - 路径参数映射:针对定义的
{param}路径参数,通过request_parameters将API Gateway方法的路径参数映射到集成请求的路径中,确保参数正确传递。 - 资源方法绑定:确保API Gateway中
/my_method/{param}资源对应的HTTP方法(如GET)已绑定上述集成配置。
验证操作
- 重新部署CDK栈,更新API Gateway配置。
- 测试API Gateway的
/my_method/{param}路径,查看后端容器日志,确认请求路径已正确传递(如日志显示GET /my_method/123 HTTP/1.1)。 - 检查响应结果是否符合预期。
内容的提问来源于stack exchange,提问作者bearrito
相关产品推荐
相关产品推荐

