39

ラチェット チャット サーバー ファイルがあります

use Ratchet\Server\IoServer;
use Ratchet\WebSocket\WsServer;
use MyAppChat\Chat;
require dirname(__DIR__) . '/vendor/autoload.php';
$server = IoServer::factory(
    new WsServer(
        new Chat()
    )
  , 26666
);
$server->run();

接続にWebsocketを使用していますが、正常にws動作します

if ("WebSocket" in window) {
    var ws = new WebSocket("ws://ratchet.mydomain.org:8888");
    ws.onopen = function() {
        // Web Socket is connected. You can send data by send() method.
        ws.send("message to send");
    };
    ws.onmessage = function (evt) { 
        var received_msg = evt.data;
    };
    ws.onclose = function() { 
        // websocket is closed. 
    };
} else {
  // the browser doesn't support WebSocket.
}

安全に接続したいので、SSLで接続しようとしていますが、うまくいきません。

if ("WebSocket" in window) {
    var ws = new WebSocket("wss://ratchet.mydomain.org:8888");
    ws.onopen = function() {
        // Web Socket is connected. You can send data by send() method.
        ws.send("message to send");
    };
    ws.onmessage = function (evt) { 
        var received_msg = evt.data;
    };
    ws.onclose = function() { 
        // websocket is closed. 
    };
} else {
  // the browser doesn't support WebSocket.
}

私の質問は、websocket を SSL 接続で接続する方法です。

何か案が?

4

9 に答える 9

55

Apache Web サーバー (2.4 以上) を使用している場合は、httpd.conf ファイルでこれらのモジュールを有効にします。

  1. mod_proxy.so
  2. mod_proxy_wstunnel.so

この設定を httpd.conf ファイルに追加します

ProxyPass /wss2/ ws://ratchet.mydomain.org:8888/

WSS 接続が必要な場合は、JavaScript 呼び出しで次の URL を使用します。

var ws = new WebSocket("wss://ratchet.mydomain.org/wss2/NNN");

Apache Web サーバーを再起動し、設定 (telnet ホスト名ポート) を適用する前に、Ratchet ワーカー (Web ソケット接続) が開いていることを確認します。

于 2015-02-08T11:45:00.437 に答える
9

Chris BodenによるRatchet の Google グループでこの回答を見つけました。

最善の解決策は、Nginx を Web サーバーとして使用することです。Nginx に着信接続をポート 80 でリッスンさせ、SSL を処理させます。Nginx は、着信接続を通常の Web サイトの PHP-FPM に転送し、接続が WebSocket 接続であることを検出した場合は、選択したポートで実行中の Ratchet アプリケーションにプロキシします。JavaScript はwss://mydomain.org経由で接続でき ます。

アプリケーションがnginxを使用して提供される場合、これはstunnelを使用する代替方法です。

于 2013-11-26T21:20:14.220 に答える
4

ドメインconfに追加するだけで、Apacheも機能しました。

ProxyPass /wss/ wss://127.0.0.1:8888/

Apache をリロードし、インポートしてクライアント側で wss を設定し、/wss/の場所を含めます。

wss://127.0.0.1/wss/
于 2014-12-18T18:59:32.923 に答える
3

Windows IIS を使用している場合は、HTTPS 用に構成されていることを確認してから (自己署名証明書を使用しています)、リバース プロキシをインストールします。

URL 書き換え: https://www.iis.net/downloads/microsoft/url-rewrite および ARR 3.0: https://www.iis.net/downloads/microsoft/application-request-routing

また、IIS で websockets サポートを有効にする必要があります。ここに画像の説明を入力

URL 書き換え用のフォルダー (myproxyfolder など) を作成し、このフォルダーにコンテンツを含む web.config ファイルを作成します。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="WebSocketProxy" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://127.0.0.1:8080" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

http://127.0.0.1:8080」をWebSocketサービスに変更します(WINでPHPにRatchedを使用しています)。

JavaScript のクライアント側では、次のような安全な websockets wss:// プロトコルを使用します。

    mysock = new WebSocket('wss://127.0.0.1/myproxyfolder');
...
于 2017-10-24T09:09:03.863 に答える