AWS Websocket API通过Cloudfront访问返回403 Forbidden求助
解决CloudFront转发WebSocket API Gateway出现403 Forbidden的问题
核心问题分析
你的配置存在两个关键问题:
- 路径映射不匹配:CloudFront行为的路径模式与API Gateway的WebSocket端点路径不对应,导致请求转发到错误的后端路径。
- 缺失WebSocket握手必需请求头:源请求策略未包含
Connection和Upgrade头,API Gateway无法识别WebSocket握手请求,返回403。
具体修复步骤
1. 修正路径映射配置
你的WebSocket API端点根路径是/dev,需确保CloudFront将请求转发到该路径:
- 方案A(推荐,与原端点路径一致):
- 修改行为的路径模式为
/dev/* - 保持源路径为空
此时访问wss://app.blablabla.cloud/dev/?param1=1¶m2=test即可正常转发到原端点。
- 修改行为的路径模式为
- 方案B(保留自定义路径
/dev/my-socket):- 修改源配置的源路径为
/dev - 保持行为的路径模式为
/dev/my-socket/* - 在行为的缓存键和源请求设置中,确认路径转换规则为「将请求路径中匹配路径模式的部分替换为源路径」(默认配置即可)
此时访问wss://app.blablabla.cloud/dev/my-socket/?param1=1¶m2=test会被转发到x5g9h3p2rq.execute-api.eu-central-1.amazonaws.com/dev/?param1=1¶m2=test。
- 修改源配置的源路径为
2. 更新源请求策略
编辑你的源请求策略,添加以下两个必需请求头:
ConnectionUpgrade
最终源请求策略应包含:- Cookies:全部
- Query strings:全部
- Headers:
Sec-WebSocket-Key、Sec-WebSocket-Version、Sec-WebSocket-Protocol、Sec-WebSocket-Extensions、Connection、Upgrade
3. 验证其他配置
- 确认行为的允许HTTP方法包含
GET(已配置,无需修改) - 确认源配置的协议为「仅HTTPS」(已配置,无需修改)
- 等待CloudFront配置部署完成(通常需要5-15分钟)后再测试
测试验证
修改完成后,用Postman重新发起请求:
wss://app.blablabla.cloud/dev/?param1=1¶m2=test (方案A) # 或 wss://app.blablabla.cloud/dev/my-socket/?param1=1¶m2=test (方案B)
此时应收到101 Switching Protocols响应,且API Gateway控制台能正常触发$connect函数。
内容的提问来源于stack exchange,提问作者cmgchess
相关产品推荐
相关产品推荐

