Fargate部署R Shiny应用通过ALB DNS访问WebSocket连接失败求助
问题解决思路
核心原因
Shiny依赖WebSocket维持实时交互,通过ALB访问时,Shiny自动生成的WebSocket地址(如ws://my-app-address:44977/websocket/)要么和ALB实际监听端口不匹配,要么ALB未开启WebSocket支持,最终导致连接失败、界面变灰。
具体解决方案
1. 开启ALB的WebSocket支持
- 确保ALB目标组使用
HTTP或HTTPS协议(WebSocket依赖HTTP/HTTPS握手建立连接) - 检查ALB安全组,开放对应访问端口:如果ALB用80/443端口,需放行这两个端口;如果用自定义端口44977,要确保安全组允许外部访问该端口
- 确认目标组健康检查配置正常,ALB能正确转发流量到Fargate任务
2. 强制Shiny生成正确的WebSocket地址
通过配置让Shiny知晓ALB的外部访问地址,避免自动生成错误的WebSocket路径:
- 环境变量方式(推荐):在Fargate任务定义中添加环境变量
SHINY_SERVER_URL=https://你的ALB-DNS名称
如果ALB用自定义端口:
SHINY_SERVER_URL=https://你的ALB-DNS名称:443
- 代码方式:在
app.R或ui.R开头添加配置
options(shiny.host = "0.0.0.0") options(shiny.port = 3838) # 对应Fargate任务暴露的Shiny端口 options(shiny.server.url = "https://你的ALB-DNS名称")
3. 检查ALB端口转发规则
如果ALB监听80/443端口,却转发到Fargate任务的非默认端口,或未正确保留请求头信息,会导致Shiny识别错误端口:
- 在ALB目标组属性中开启转发客户端IP和端口
- 核对端口映射:确保ALB监听端口和转发到Fargate任务的端口对应正确(比如ALB 80端口转发到任务3838端口)
4. 移除无效的定时代码
你之前添加的定时代码未实际发送有效WebSocket消息,属于无效配置,直接删除即可。Shiny会自动维护WebSocket连接,无需手动定时触发。
内容的提问来源于stack exchange,提问作者hrii00
相关产品推荐
相关产品推荐

