我最近通过 docker 在我的服务器上设置了 Rocket.chat 实例。在浏览器和 Mac 应用程序中一切正常,但在 Android 或 ios 移动应用程序上则不然。
输入工作场所 URL 后,我收到消息“Websocket 在此服务器上被禁用”。
服务器:
我严格遵循了不同帖子上的所有配置和提示,但没有任何效果。我的 nginx 配置:
location ~ ^/.* {
proxy_pass https://chat.my-domain.de:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
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 https;
proxy_set_header X-Nginx-Proxy true;
proxy_redirect off;
}
我不知道如何解决这个问题,你有什么建议吗?非常感谢!
有同样的问题,只是我使用 NPM(Nginx 代理管理器)代替 NginX。
原来,在NPM中创建主机时,我需要激活Websocket支持。
根据nginx博客
WebSocket 协议与 HTTP 协议不同,但 WebSocket 握手与 HTTP 兼容,使用 HTTP 升级工具将连接从 HTTP 升级到 WebSocket。这使得 WebSocket 应用程序能够更轻松地融入现有基础设施。
还有一个带有完整配置的示例。 也许这会给你更多的洞察力,因为 $connection_upgrade 是在你的配置中设置的。
但是映射部分也集成在配置中吗?
这是例子:
http {
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream websocket {
server 192.168.100.10:8010;
}
server {
listen 8020;
location / {
proxy_pass http://websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
}
}
}
对于 Rocket.chat 到移动应用程序的工作:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream myrocketchat {
server 127.0.0.1:3000;
}
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://myrocketchat;
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;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}