ラチェットチャットサーバーファイルがあります
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接続で接続する方法
何か案が?
Apache Webサーバー(2.4以上)を使用している場合、httpd.confファイルでこれらのモジュールを有効にします。
この設定をhttpd.confファイルに追加します
ProxyPass /wss2/ ws://ratchet.mydomain.org:8888/
WSS接続が必要な場合は、JavaSscript呼び出しで次のURLを使用します。
var ws = new WebSocket("wss://ratchet.mydomain.org/wss2/NNN");
Apache Webサーバーを再起動し、ラチェットワーカー(Webソケット接続)が開いていることを確認してから、設定(telnetホスト名ポート)を適用してください。
ラチェットのグーグルグループ by クリスボーデン :
最適な解決策は、NginxをWebサーバーとして使用することです。 Nginxが着信接続をポート80でリッスンし、SSLを処理するようにします。 Nginxは通常のWebサイトの着信接続をPHP-FPMに転送します。接続がWebSocket接続であると検出した場合は、選択したポートで実行中のラチェットアプリケーションにプロキシします。あなたのjavascriptはwss://mydomain.org経由で接続できます
数日前、私はこの質問の答えを探していましたが、Github Ratchetの問題でこれを見つけました: https://github.com/ratchetphp/Ratchet/issues/489
heidji で答えられた最後の答えはこう言います:
このコメントは、SSLを実装する方法を簡単に説明する必要がある初心者の場合にのみ追加します。
$webSock = new React\Socket\Server('0.0.0.0:8443', $loop);
$webSock = new React\Socket\SecureServer($webSock, $loop, ['local_cert' => '/etc/ssl/key.pem', 'allow_self_signed' => true, 'verify_peer' => false]);
そして上記のcbodenが述べたようにIoServerに注入します
したがって、HTTPSプロキシを必要とせずに、Ratchetで安全なWebSocketサーバーを実装する方法があるようです。
SecureServerクラスのドキュメントは次のとおりです。 https://github.com/reactphp/socket#secureserver
Nginxを使用している場合は、SSLサーバーブロックに次のように記述します。
location /services/myservice {
# switch off logging
access_log off;
# redirect all HTTP traffic to localhost
proxy_pass http://localhost:1234;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $Host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# WebSocket support (nginx 1.4)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Path rewriting
rewrite /services/myservice/(.*) /$1 break;
proxy_redirect off;
# timeout extension, possibly keep this short if using a ping strategy
proxy_read_timeout 99999s;
}
これにより、wss://yoursite.com/services/myservice
ポート1234で実行されているソケットを呼び出します。ポート1234を世界中に公開したままにしないでください。
Apacheも私のために働いて、ドメインconfに追加するだけです:
ProxyPass /wss/ wss://127.0.0.1:8888/
Apacheをリロードしてからインポートし、クライアント側でwssを設定して/ wss / location
wss://127.0.0.1/wss/
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でwebsocketサポートを有効にする必要があります:
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:808 」をWebSocketサービスに変更します(PHP WINでRatchedを使用しています)。
JavaScriptのクライアント側で、次のように安全なwebsockets wss://プロトコルを使用します。
mysock = new WebSocket('wss://127.0.0.1/myproxyfolder');
...
それはubuntu 18.04のために私のために働いています。
var ws = new WebSocket( 'wss://domain.com/ws/');
ターミナルで次のコマンドを実行して、プロキシモジュールを有効にしました。
Sudo a2enmodプロキシproxy_balancer proxy_wstunnel proxy_http
Apache仮想ホスト設定ファイル(/etc/Apache2/sites-available/000-default-le-ssl.conf)にこれらの行を追加しました
ProxyRequestsオフ
ProxyPass "/ ws /" "ws://domain.com:5555 /"
Apacheサービスを再起動しました。そして、websocketはhttpsで動作し始めました。