私は、RatChet PHPを使用したメッセージングシステムに関するチュートリアルに従おうとしています。 https://www.twilio.com/blog/create-php-websocket-server-build-real-time-even-driven-application 私はexample.comというドメインを持っており、通常のHTMLページがあり、それを通常のウェブサイトとして提供する必要があります。メッセージングシステムでは、8445というポートが必要です。
Ubuntu 22.04にapache2をインストールし、lets encrypt sslをインストールしました。サイトは正常に動作しています。
今、Websocketサーバーをセットアップしたいので、ファイアウォールでTCPポート8445を開きました
有効なApacheモジュール
a2enmod プロキシ a2enmod proxy_http a2enmod proxy_wstunnel
元のドメインをexample.comに置き換えました
私のconfファイルはexample.com.confのようなものです
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog /var/www/example.com/public_html/logs/error.log
CustomLog /var/www/example.com/public_html/logs/access.log combined
ProxyRequests Off
ProxyPass / https://example.com:8445/
ProxyPassReverse / https://example.com:8445/
</VirtualHost>
そして
example.com-le-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
SSLEngine On
SSLProxyEngine On
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog /var/www/example.com/public_html/logs/error.log
CustomLog /var/www/example.com/public_html/logs/access.log combined
ProxyRequests Off
ProxyPass / wss://example.com:8445/
ProxyPassReverse / https://example.com:8445/
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
<Location />
ProxyPassReverse /
Options FollowSymLinks
Require all granted
</Location>
</VirtualHost>
</IfModule>
接続しようとすると503エラーが発生し、Apacheログには次のように表示されます。
[proxy_http:error] [pid 20090] [client 49.34.XX:55961] AH01114: HTTP: バックエンドへの接続に失敗しました: example.com [Sat Dec 03 16:47:04.378489 2022] [proxy:error] [pid 20091] (111)接続が拒否されました: AH00957: wss: 45.33.XX:8445 (example.com) への接続に失敗しました
問題解決に協力してくれる人がいたら教えてください。
ありがとう!
答え1
問題は、Apache プロキシがポート 8445 でバックエンド サーバーに接続できないことにあるようです。この問題を解決するために確認できる点がいくつかあります。
Websocket サーバーが実行中で、ポート 8445 でリッスンしていることを確認します。これを確認するには、netstat コマンドを使用できます。
sudo netstat -tlnp | grep 8445
Websocket サーバーが実行中の場合は、次のような行が表示されます。
tcp 0 0 0.0.0.0:8445 0.0.0.0:* LISTEN <websocket server PID>/websocket
ポート 8445 へのトラフィックをブロックするファイアウォールやセキュリティ グループがないことを確認します。サーバー自体から Websocket サーバーに接続してみることで、これを確認できます。
telnet localhost 8445
接続が成功すると、空白の画面が表示されます。接続が拒否された場合は、ファイアウォールまたはセキュリティ グループによってトラフィックがブロックされている可能性があります。
Websocket サーバーが Apache プロキシからの接続を受け入れるように設定されていることを確認します。使用している Websocket サーバーによっては、リッスンする特定の IP アドレスまたはホスト名を設定したり、Apache サーバーの IP アドレスからの接続を許可するようにアクセス制御リスト (ACL) を設定したりする必要がある場合があります。
Websocket サーバーのログをチェックして、接続が拒否された理由を示すエラー メッセージがあるかどうかを確認します。