[英]Ratchet socket ws to wss
我有兩個 Docker 容器。 一個是在 https 上運行的應用程序,另一個是在 Ratchet 庫上運行的 web 套接字。
當我在 Mac 上時,從https
連接到ws
沒有問題,我認為這是因為 Docker 在127.0.0.1
上運行,所以我想有一些特殊規則允許它。
切換到 Win 機器時出現問題,因為wss
位於192.168.99.100
上,現在將https
連接到ws
不再有效,因為瀏覽器期待https
連接。 只是將端點切換到wss://
而不是ws://
顯然不能開箱即用,因為連接握手自然會超時。
我的套接字容器沒有運行 nginx 和 apache,它是一個簡單的 Ratchet 服務器,最終只是暴露了我在外面告訴它的端口。
是否有一些關於如何切換到wss
的好資源,因為我找不到。
這是我嘗試過的:
$server = IoServer::factory(new HttpServer($wsServer), $config['port'], '0.0.0.0', [
'local_cert' => __DIR__ . '/../config/cert.pem',
'allow_self_signed' => true,
'verify_peer' => false,
'ciphers' => 'TLSv1.2'
]);
此代碼不會出錯,但也不會啟用wss
端點,因為同樣的事情正在發生。 我該如何繼續並完成這項工作? 另外,我在某處讀到不允許使用 wss 自簽名證書。 我可以在套接字容器上使用簽名證書並在自簽名證書上使用應用程序容器,還是它們都需要使用同一個?
編輯:
由於 Ratchet 不久前刪除了 SSL,我將代碼添加到IoServer::factory()
:
public static function factory(MessageComponentInterface $component, $port = 80, $address = '0.0.0.0', array $sslContext = null) {
$loop = LoopFactory::create();
$socket = new Reactor($address . ':' . $port, $loop);
if (is_array($sslContext)) {
$socket = new SecureReactor($socket, $loop, $sslContext);
}
return new static($component, $socket, $loop);
}
但即使沒有它,我也嘗試了另一種方式:
$server = new IoServer(new HttpServer($wsServer), new SecureServer($webSock, $loop, array(
'local_cert' => __DIR__ . '/../config/cert.pem',
'allow_self_signed' => true,
'verify_peer' => false,
)
));
我最終按原樣啟動 Ratchet (正常ws
)並在應用程序端執行 nginx 代理傳遞:
location /ws {
resolver 127.0.0.11 valid=30s;
set $backend "http://container_name:port";
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_pass $backend;
}
解析器部分確保 nginx 在您殺死容器時不會出錯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.