如何解决Ratchet websocket (Docker/nginx/SSL) WebSocket 打开握手超时
女士们先生们您好!我想弄清楚如何使用 Docker (laradock)、Nginx、PHP、棘轮 (https://socketo.me) 和 wss 协议进行聊天(因为我的网站使用的是 SSL)。
问题出现在js控制台的聊天页面:
WebSocket connection to 'wss://mydomain.com:8787/' Failed: WebSocket opening handshake timed out
当时,如果我尝试通过 ws:// 进行连接,则会出现页面是通过 https 加载的错误,因此我必须使用 wss。
我有什么:
我在我的工作区容器上创建并公开了 8787 端口: docker ps screenshot
这是我从棘轮文档复制并通过 ssh 控制台运行的 websocket 服务器代码:
use Classes\Messenger\Chat;
use Ratchet\Http\HttpServer;
use Ratchet\Server\IoServer;
use Ratchet\WebSocket\WsServer;
require('/var/www/mydomain.com/vendor/autoload.PHP');
$server = IoServer::factory(
new HttpServer(
new WsServer(
new Chat()
)
),8787,'0.0.0.0'
);
$server->run();
这是我的页面聊天脚本:
<script>
var conn = new WebSocket('wss://mydomain.com:8787');
conn.onopen = function(e) {
console.log("Connection established!");
};
conn.onmessage = function(e) {
console.log(e.data);
};
</script>
我尝试了从搜索中获取的所有提示,但我发现的所有信息都非常矛盾。
我尝试了什么:
我尝试在 Nginx docker 容器上公开端口并在 443 端口侦听器中使用 proxy_pass,如下所示:
server {
server_name mydomain.com;
# For https
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /var/certs/mydomain.com_fullchain1.pem;
ssl_certificate_key /var/certs/mydomain.com_privkey1.pem;
#ssl_trusted_certificate /var/certs/mydomain.com_chain1.pem;
root /var/www/mydomain.com;
index index.PHP index.html index.htm;
location /websocket {
proxy_pass http://172.22.0.1:8787;
proxy_pass_header Server;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
然后在我的页内聊天脚本中按行 new WebSocket('wss://mydomain/websocket'); 连接到 websocket,但它确实影响了“CONNECTION_REFUSED”错误。
请告诉我必须朝哪个方向探索。感谢您的时间!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。