Firefox 无法建立到 WSS 的连接
Posted
技术标签:
【中文标题】Firefox 无法建立到 WSS 的连接【英文标题】:Firefox can't establish a connection to WSS 【发布时间】:2017-08-02 19:29:22 【问题描述】:我有一个带有 Spring Boot Websockets 的 websocket 服务器主机。 Safari、Chrome 和 Edge 可以连接,但 Firefox 不能。错误:
Firefox kann keine Verbindung zu dem Server unter wss://MY_DOMAIN/growth-websocket/933/omw002tp/websocket aufbauen。
(= "Firefox 无法在 wss://... 处建立与服务器的连接")
我正在使用 Apache 代理 WebSocket:
RewriteEngine on
RewriteCond %HTTP:UPGRADE ^WebSocket$ [NC]
RewriteCond %HTTP:CONNECTION ^Upgrade$ [NC]
RewriteRule .* ws://localhost:4567%REQUEST_URI [P]
感谢您的帮助!
【问题讨论】:
你试过这个解决方案了吗?它可能对你有用。 ***.com/questions/23775215/… 这里有同样的问题,除了我使用 nginx 和 node.js 和 npm 'ws' websockets。 【参考方案1】:经过几次尝试后,我的Docker OIDC proxy 得到了这个工作。棘手的一点是允许它在 websockets 的代理 URI 和普通 HTTP 相同时工作。如果它是不同的,我们可以简单地在它前面加上另一个 ProxyPass
/ProxyPassReverse
组合。
为了支持这一点,Rewrite
引擎用于检测是否设置了 Upgrade
和 Conntextion
标头,如果设置了相应的代理。第二个棘手的问题 [虽然我不确定为什么] 是把它放在 ProxyPass
和 ProxyPassReverse
指令之后。
这是来自https://github.com/trajano/docker-oidc-proxy/blob/master/oidc-proxy.conf的代码
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule rewrite_module modules/mod_rewrite.so
...
ProxyPass "/" "http://$SERVICE_NAME:$SERVICE_PORT/"
ProxyPassReverse "/" "http://$SERVICE_NAME:$SERVICE_PORT/"
ProxyPreserveHost On
ProxyVia On
RewriteEngine on
RewriteCond %HTTP:UPGRADE ^WebSocket$ [NC]
RewriteCond %HTTP:CONNECTION ^Upgrade$ [NC]
RewriteRule .* ws://$SERVICE_NAME:$SERVICE_PORT%REQUEST_URI [P]
我能够通过使用 Web Sockets 的 Jupyter 笔记本服务器成功验证这一点。
【讨论】:
【参考方案2】:这个答案来晚了,但可能会帮助其他有类似问题的人。
我创建了一个类似的问题并提供了两个不同的答案,都按预期工作。一个答案是关于如何配置 Apache 代理以使 ws:// 在 https 上工作,另一个则告诉如何生成自签名证书以便在不使用代理的情况下使用 HTTPS 和 WSS 工作而不会出现问题。
Can't establish a connection with javascript to a secure websocket server
请仔细阅读我留下的cmets。
【讨论】:
以上是关于Firefox 无法建立到 WSS 的连接的主要内容,如果未能解决你的问题,请参考以下文章
WebSocket/Node.js 帮助:无法建立到 wss://domain:8080 的连接 - 不是特定于浏览器的
使用多域 SSL SAN 证书无法在 Chrome 中建立 wss websocket 连接
无法连接到 wss://(连接建立错误:net::ERR_CONNECTION_CLOSED)