web-dev-qa-db-ja.com

AWS EC2インスタンスをWebSocketに接続するときの問題

PHP WebSocketでコーディングされたMySQLデータベースに接続されたlocalhostからチャットアプリを実行しようとしたので、成功しました。

また、SSH資格情報にログインしてPuTTY端末から実行しようとすると、サーバーがポート番号8080で起動したと表示されていました。

ubuntu@ec3-193-123-96:/home/admin/web/ec3-193-123-96.eu-central-1.compute.amazonaws.com/public_html/application/libraries/server$ php websocket_server.php
PHP Fatal error: Uncaught React\Socket\ConnectionException: Could not bind to tcp://0.0.0.0:8080: Address already in use in /home/admin/web/ec3-193-123-96.eu-central-1.compute.amazonaws.com/public_html/application/libraries/vendor/react/socket/src/Server.php:29
Stack trace:
#0 /home/admin/web/ec3-193-123-96.eu-central-1.compute.amazonaws.com/public_html/application/libraries/vendor/cboden/ratchet/src/Ratchet/Server/IoServer.php(70): React\Socket\Server->listen(8080, '0.0.0.0')
#1 /home/admin/web/ec3-193-123-96.eu-central-1.compute.amazonaws.com/public_html/application/libraries/server/websocket_server.php(121): Ratchet\Server\IoServer::factory(Object(Ratchet\Http\HttpServer), 8080)
#2 {main}
thrown in /home/admin/web/ec3-193-123-96.eu-central-1.compute.amazonaws.com/public_html/application/libraries/vendor/react/socket/src/Server.php on line 29
ubuntu@ec3-193-123-96:/home/admin/web/ec3-193-123-96.eu-central-1.compute.amazonaws.com/public_html/application/libraries/server$

そのため、ポート#8080をポート#8282に変更しようとしましたが、成功しました

ubuntu@ec3-193-123-96:/home/admin/web/ec3-193-123-96.eu-central-1.compute.amazonaws.com/public_html/application/libraries/server$ php websocket_server.php

シェルスクリプトを実行したまま、いくつかのWebブラウザーウィンドウを開き、JavaScriptコンソールまたは次のJavaScriptのページを開きます。

var conn = new WebSocket('ws://0.0.0.0:8282');
conn.onopen = function(e) {
    console.log("Connection established!");
};

conn.onmessage = function(e) {
    console.log(e.data);
};

ブラウザコンソールの結果から:

「ws://5.160.195.94:8282 /」へのWebSocket接続に失敗しました:接続の確立中にエラーが発生しました:net :: ERR_CONNECTION_TIMED_OUT

私はパブリックIPとプライベートIPを割り当てようとしましたが、同じ古い結果になりましたか?

WebSocketから、特にホストされているサーバーから http://ec3-193-123-96.eu-central-1.compute.amazonawsのようなドメイン名のサーバーから接続して、解決/克服するとどうしたらよいでしょうか。 .com /

var conn = new WebSocket('ws://localhost:8383');

AWS EC2インスタンスで独自のサービスを実行するために、仮想サーバーをどのように設定する必要がありますか?

更新:

セキュリティグループから

  • [受信]タブの下 enter image description here

  • [送信]タブ enter image description here

インスタンスに関連付けられているEC2Security Groupがすべてのポート8282、8383などへのアクセスを許可していることを確認します。

また、JSコードが接続しようとするIPまたはホスト名は何ですか? EC2インスタンスのパブリック/エラスティックIPですか?そのはず。他には何も機能しません。

通常、JSコードは、Webページを提供したのと同じサーバーを呼び出します。つまり、URLが https://www.example.com/ の場合、JavaScripsはws:// wwwに接続します。 .example.com:8282 /-ホスト名をハードコーディングせず、代わりにURLで使用されていたものを使用します。これは、IPアドレス、正規名、またはec2-12-34-56-78.eu-west-2 ...アドレスのいずれかであり、ユーザーが入力した内容に関係なくすべて機能します。

それが役に立てば幸い:)

2
MLu