gpt4 book ai didi

ssl - Ratchet + nginx + SSL/安全 websocket

转载 作者:太空宇宙 更新时间:2023-11-03 12:38:57 25 4
gpt4 key购买 nike

我一直在尝试通过 SSL 运行 Ratchet.io(这个问题:php ratchet websocket SSL connect?)。

我的网络服务器在 myhost.mobi 上运行,我为 websocket 服务“wws.myhost.mobi”创建了一个单独的虚拟主机。

我的网络套接字:

$webSock = new React\Socket\Server($loop);
$webSock->listen(8080, '0.0.0.0');
$webServer = new Ratchet\Server\IoServer(
new Ratchet\Http\HttpServer(
new Ratchet\WebSocket\WsServer(
new Ratchet\Wamp\WampServer(
$pusher
)
)
),
$webSock
);

我的 nginx 配置(我在 nginx 1.5.8 上):

upstream websocketserver {
server localhost:8080;
}

server {
server_name wss.myapp.mobi;

listen 443;
ssl on;
ssl_certificate /etc/ssl/myapp-mobi-ssl.crt;
ssl_certificate_key /etc/ssl/myapp-mobi.key;

access_log /var/log/wss-access-ssl.log;
error_log /var/log/wss-error-ssl.log;
location / {
proxy_pass http://websocketserver;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header 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_read_timeout 86400; # neccessary to avoid websocket timeout disconnect
proxy_redirect off;
}
}

我的客户端脚本:

var conn = new ab.Session('wss://wss.myapp.mobi', function(o) {

// ...

}, function() {
console.warn('WebSocket connection closed');
}, {
skipSubprotocolCheck: true
});

因此,当我在 Firefox 中加载页面时,我看到一个到 wss://wss.myapp.mobi:8080/的传出连接,它挂起(微调器)并且永远不会完成或消失。我没有在日志中看到任何请求到达后端的痕迹。

我错过了什么?

谢谢!

编辑 我意识到我应该连接到 wss://wss.myapp.mobi,但现在我得到“101 切换协议(protocol)”状态。

EDIT 2 现在一切都在使用上面的配置。 “101 Switching Protocols”状态原来是一条正常消息。问题解决了!

最佳答案

通过检查问题编辑历史,很明显,问题中的配置是正确的,temuri 尝试从设置了端口的客户端连接,

upstream websocketserver {
server localhost:8080;
}

但是这个代码块告诉 Nginx 有一个 tcp 服务器在端口 8080 上运行,将其表示为 websocketserver 别名,但是运行的服务器是不可访问的。

检查下面的配置,

server {
server_name wss.myapp.mobi;

listen 443;
ssl on;
ssl_certificate /etc/ssl/myapp-mobi-ssl.crt;
ssl_certificate_key /etc/ssl/myapp-mobi.key;

access_log /var/log/wss-access-ssl.log;
error_log /var/log/wss-error-ssl.log;
location / {
proxy_pass http://websocketserver;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header 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_read_timeout 86400; # neccessary to avoid websocket timeout disconnect
proxy_redirect off;
}
}

此配置将域 wss.myapp.mobi 绑定(bind)到端口 443,启用 ssl 和代理通过 proxy_pass 将请求发送到本地 websocket 服务器> 指令,其余指令用于连接升级处理。

因此可以从浏览器客户端访问 websocket 服务器

// connect through binded domain
// instead of wss.myapp.mobi:8080 which will not work
var url = 'wss://wss.myapp.mobi';

关于ssl - Ratchet + nginx + SSL/安全 websocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22493646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com