同域名不同端口服务调用出现net::ERR_CONNECTION_REFUSED错误的解决建议求助
同域名不同端口服务调用出现net::ERR_CONNECTION_REFUSED错误的解决建议求助
看起来你遇到了同域名下跨端口调用服务的连接拒绝问题,我来帮你梳理几个实用的排查方向和解决方案:
先确认端口与服务的可达性
首先排除最基础的问题:- 在服务器本地执行
curl https://domain.com:2020,看看能不能正常获取响应,这能快速判断服务是否真的在2020端口正常运行 - 检查服务器的防火墙规则,确保2020端口的入站、出站请求都被放行;如果用的是云服务器,还要检查云平台的安全组配置——很多时候本地防火墙开了,但云安全组没放行端口,也会导致连接被拒绝
- 查看Kurento客户端服务的启动日志,确认服务没有启动失败、端口被占用的情况
- 在服务器本地执行
检查前端调用地址的正确性
- 确保在
MY_CHAT.html里调用的是完整的域名端口地址,比如wss://domain.com:2020(Kurento常用WebSocket协议),绝对不要用localhost或者内网IP,必须和前端页面同域名 - 虽然你说两张证书相同,但可以确认下证书的SAN(主题备用名称)是否覆盖了域名,不过证书一般绑定域名而非端口,这个大概率不是问题,但排查时可以顺带确认证书有效性
- 确保在
确认服务的监听配置
检查Kurento客户端服务的Node.js代码,确认监听的是0.0.0.0:2020而不是localhost:2020。如果服务只监听localhost,那么只有服务器本地能访问,外部(包括同域名的前端页面)都会被拒绝连接推荐使用反向代理方案(生产环境更优)
既然两个服务都属于同域名,用Nginx做反向代理是更安全、更优雅的解决方案,能避免跨端口调用的问题:
你可以把domain.com/kurento路径转发到2020端口的服务,这样前端只需要调用同域名同端口的路径,无需暴露2020端口。给你一个简单的Nginx配置示例:server { listen 443 ssl; server_name domain.com; ssl_certificate /path/to/your/certificate.pem; ssl_certificate_key /path/to/your/private-key.pem; # 处理原网站服务的请求 location / { proxy_pass http://localhost:3000; # 这里替换成你的site服务实际监听的端口(如果site服务不是直接监听443的话) proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } # 转发Kurento服务的请求 location /kurento/ { proxy_pass http://localhost:2020/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; # WebSocket协议需要额外配置 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }配置完成后,前端就可以通过
wss://domain.com/kurento/调用Kurento服务,既安全又避免了跨端口的问题检查浏览器安全策略与CORS配置
同域名不同端口属于不同源,虽然WebSocket一般允许跨端口调用,但还是要检查浏览器控制台是否有跨域相关的错误。同时确认Kurento服务的响应头里设置了Access-Control-Allow-Origin: https://domain.com,允许前端页面的跨源请求
备注:内容来源于stack exchange,提问作者Nikola Lukic
相关产品推荐
相关产品推荐

