Streamlit-WebRTC部署AWS服务器后报错,配置STUN服务器仍未解决
错误核心原因
你碰到的Error: navigator.mediaDevices is undefined. It seems the current document is not loaded securely.错误,本质是WebRTC API仅允许在安全上下文(HTTPS协议)中运行。你当前通过HTTP(http://13.48.59.97:80)访问应用,浏览器会直接限制navigator.mediaDevices的调用权限——这和STUN服务器配置无关,STUN仅用于解决P2P网络穿透问题,无法突破安全上下文限制。
可行解决方案
必须将应用切换为HTTPS协议访问,以下是两种落地方式:
方案1:直接让Streamlit启用HTTPS
- 先为服务器IP/域名申请SSL证书(推荐用Let's Encrypt免费证书)
- 修改Docker启动命令,添加Streamlit的HTTPS参数:
注意:需将证书文件挂载到容器内对应路径,或在构建镜像时复制进容器。CMD streamlit run app.py --server.port=80 --server.sslCertFile=/app/cert.pem --server.sslKeyFile=/app/privkey.pem
方案2:用Nginx做反向代理(更推荐)
- 在AWS服务器安装Nginx,配置反向代理规则,让Nginx处理HTTPS请求并转发到Streamlit的8501端口:
server { listen 443 ssl; server_name 13.48.59.97; ssl_certificate /path/to/fullchain.pem; ssl_certificate_key /path/to/privkey.pem; location / { proxy_pass http://localhost:8501; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } - 调整Docker容器端口映射,仅在本地回环地址暴露8501端口:
docker run -p 127.0.0.1:8501:8501 your-image-name
补充说明
你现有代码(包括STUN配置)本身无问题,故障完全源于访问协议。本地开发时localhost被浏览器视为安全上下文,所以不会报错,但公网环境必须使用HTTPS。
内容的提问来源于stack exchange,提问作者swami nathan
相关产品推荐
相关产品推荐

