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

如何配置AWS CloudFront通过自定义端口使用安全WebSocket(WSS)?

问题排查与配置修正要点

首先明确一个核心误解:CloudFront仅监听80(HTTP)和443(HTTPS/WSS)端口,不支持自定义端口(比如3200)的外部请求接入。你之前尝试让客户端通过3200端口连接CloudFront是行不通的,客户端应该用标准WSS端口443发起请求,CloudFront再转发到EC2的3200端口。

以下是你可能遗漏的关键配置:

  • CloudFront行为需启用WebSocket支持
    在CloudFront分发的行为设置里,创建一个单独的行为(比如匹配路径/ws/*或你WebSocket服务的专属路径),务必勾选**"WebSocket support"**选项(这是CloudFront转发WebSocket请求的必要开关,默认关闭)。

  • 源配置的端口与权限

    1. 检查EC2安全组:除了HTTPS(443),还要允许CloudFront的IP段访问3200端口。你可以通过AWS CLI命令aws cloudfront list-distribution-ips获取CloudFront的IP范围,把这些IP段添加到EC2安全组的入站规则中,协议选TCP,端口3200。
    2. 源协议设置:如果你的EC2上3200端口是纯WebSocket(ws://),CloudFront源的协议要设为HTTP;如果是WSS(带TLS加密),则设为HTTPS,同时确保EC2上的3200端口服务配置了正确的SSL证书。
  • 源请求策略的完整请求头
    除了Sec-WebSocket-Version,还必须包含以下WebSocket核心请求头:

    • Sec-WebSocket-Key
    • Sec-WebSocket-Protocol
    • Sec-WebSocket-Extensions
      可以直接使用CloudFront的Managed-WebSocket-Origin预定义源请求策略,不用手动添加,这个策略已经包含了所有必要的WebSocket头。
  • 客户端连接地址修正
    客户端的WSS连接地址应该是wss://你的域名/[WebSocket服务路径](比如wss://example.com/ws),不要带:3200端口。CloudFront会通过你配置的行为,把这个请求转发到EC2的3200端口。

  • EC2服务的可达性验证
    先在EC2本地用curl -i http://localhost:3200/[你的路径]测试WebSocket服务是否正常响应(应该返回101 Switching Protocols相关的响应);再用CloudFront的IP段内的机器(或者用AWS Lambda模拟)测试EC2的3200端口是否可访问,排除网络连通性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:40:21