API Gateway代理VPC Link至内部NLB:代理路径请求遇重定向问题
看起来你的VPC Link连通性没问题(根路径正常),问题出在/{proxy+}代理资源的配置或后端Web服务器的路径处理上,我整理几个核心排查方向:
1. 确认代理集成的端点URL是否合理
你提到根路径路由正常,说明根路径的集成应该是指向内部NLB的正确端点,但代理资源的端点URL写的是CloudFront地址——这可能是个关键问题。VPC Link的作用是让API Gateway访问VPC内的NLB,所以集成端点应该用NLB的内部DNS名称(比如http://my-nlb-xxxxxx.us-east-1.elb.amazonaws.com/{proxy}),而不是CloudFront的公网地址。误用CloudFront地址会绕开VPC Link,还可能导致路径、Host头不匹配,触发后端重定向。
2. 验证路径传递的准确性
代理集成的核心是把/{proxy+}捕获的路径完整传递给后端,比如用户访问https://your-api-id.execute-api.region.amazonaws.com/prod/test/path,API Gateway要把test/path正确传给NLB。你可以检查:
- 集成请求的端点URL是否正确使用了
{proxy}变量,注意不要多写或少写斜杠(比如别写成http://nlb-domain.com/{proxy}/,末尾多余的斜杠可能触发后端重定向) - 再次确认「代理集成」是否真的启用——虽然你提到已经开启,但有时候控制台配置可能有延迟,不妨重新保存下配置。
3. 查看Web服务器的访问日志,分析请求细节
Web服务器返回重定向,大概率是因为收到的请求不符合它的预期(比如路径、Host头不对)。你可以:
- 导出Web服务器的访问日志,看实际收到的请求路径、Host头是什么。比如API Gateway转发的Host头是自身的域名还是NLB的域名?如果Web服务器配置了基于Host的重定向规则,就会触发跳转。
- 检查Web服务器的重定向规则,比如是否要求路径末尾带斜杠、是否需要特定前缀(比如
/app),而API Gateway转发的路径不满足这些要求。
4. 用API Gateway测试功能验证路径映射
在API Gateway控制台的「测试」标签,发送一个代理路径的请求(比如GET /test),然后查看「集成请求」部分的详细信息,确认实际发送给NLB的URL是否正确。比如是不是http://nlb-domain.com/test,路径有没有被篡改或丢失。
5. 抓取完整的重定向响应
你提到返回的重定向是b9d0c6...(应该是截断的URL),可以用curl命令查看完整的响应头:
curl -v https://your-api-id.execute-api.region.amazonaws.com/prod/your-proxy-path
通过Location头就能知道Web服务器要重定向到哪里,比如是重定向到带斜杠的路径、带特定前缀的地址,还是其他域名,这样就能精准定位问题。
举个常见的例子:如果Web服务器收到http://nlb-domain.com/test,但它期望的是http://nlb-domain.com/test/(末尾带斜杠),就会返回301重定向。这种情况要么在API Gateway的集成请求里调整路径,要么修改Web服务器的重定向规则即可。
另外,虽然根路径正常,但还是可以确认下NLB目标组的健康检查路径是否覆盖了代理路径(不过大概率没问题,毕竟根路径正常)。
内容的提问来源于stack exchange,提问作者Chris Rouffer

