【发布时间】:2020-11-20 14:45:07
【问题描述】:
花了很多时间寻找答案,但似乎没有明确的答案。 我在 IIS8 上设置并运行了棘轮 websockets,这在 ws:// 本地和远程都可以正常工作。我现在想实现 wss:// 但我无法让它工作。
我尝试了两种不同的方法,首先启用 wss on react 如下:
$loop = React\EventLoop\Factory::create();
$webSock = new React\Socket\Server('0.0.0.0:2000', $loop);
$webSock = new React\Socket\SecureServer($webSock, $loop, [
'local_cert' => 'C:/ssl/cert.crt', // path to your cert
'local_pk' => 'C:/ssl/cert_d.key', //path to your server private key
'allow_self_signed' => FALSE, // Allow self signed certs (should be false in production)
'verify_peer' => FALSE
]);
$webServer = new Ratchet\Server\IoServer(
new Ratchet\Http\HttpServer(
new Ratchet\WebSocket\WsServer(
new Chat()
)
),
$webSock, $loop
);
$webServer->run();
当我尝试从客户端连接时,使用它会使 php_cli 崩溃。
我的第二种方法是使用 IIS 重写,并将以下内容添加到 web.config
<rule name="WebSocketTestRule" enabled="true" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{CACHE_URL}" pattern="^wss://" />
</conditions>
<action type="Rewrite" url="ws://localhost:2000/" />
</rule>
据我了解,这应该将 wss:// 地址中的所有内容重写为 ws://localhost:2000/。我在 IIS 上安装了 WebSockets。
但这只是给了我以下错误WebSocket connection to 'wss://[domain.name]/' failed: HTTP Authentication failed; no valid credentials available。
在 IIS 8 上实现 WSS:// 的最佳方式是什么。甚至可能吗? 如何调试这些问题?例如,我如何测试证书是否正常? 如果有人可以帮助我指出正确的方向,并希望这个问题将来可以帮助其他人。
【问题讨论】:
-
你在iis上使用什么认证方式? Windows 身份验证,还是其他身份验证方法?
-
我选择了 Windows 身份验证,因此更改为匿名身份验证和匿名用户身份到应用程序池。对重写规则进行了一些更改,所有这些都已启动并正在运行。不确定这有多安全?
标签: php websocket iis-8.5 ratchet phpwebsocket