フォーラム forum
homechevron_rightフォーラム

GroupSessionについての自由な情報交換の場としてご利用ください

GroupSessionフォーラム:投稿一覧

 
フォーラム:00_インストール・設定
【解決】Apache経由でチャット機能のWebSocketが繋がらない(「エラーが発生しました。リア
[ 8260 ] 【解決】Apache経由でチャット機能のWebSocketが繋がらない(「エラーが発生しました。リア

公式サポートページの「Tomcat と Apache の連携方法」通りにhttpd.confを設定しても、チャット機能で以下のエラーが出て解決しなかったため、原因と対処法を共有します。同じ症状で検索されている方の参考になればと思います。

環境

GroupSession Ver5.7.3
Windows / Apache 2.4.68(OpenSSL 3.6.3、Win32) / Tomcat 9.0.65
ブラウザ: Google Chrome
症状
チャット画面を開くと赤字で「エラーが発生しました。リアルタイム通信を行うことができません。」と表示され、メッセージの送受信ができない。

※このエラーはSharedWorker(sharedworker.js)内で発生するため、通常のブラウザ開発者ツールのConsoleには出ません。chrome://inspect/#workersから該当のSharedWorkerを選んで「inspect」すると、専用のDevToolsでエラーが確認できます。

Tomcat側のログ(localhost.*.log)には以下が記録されていました。


java.lang.UnsupportedOperationException: このプロトコルは HTTP アップグレードに対応していません。
原因
公式ドキュメントのサンプル設定は、同じ<Location /gsession/>内に

通常リクエスト用: ProxyPass ajp://localhost:8009/gsession/
WebSocket用: 条件付きRewriteRule .* ws://localhost:8080%{REQUEST_URI} [P]
を併記する構成になっていますが、Apacheの処理順序上ProxyPassが先に確定してしまい、WebSocketアップグレード要求も含めて全リクエストがAJP側(8009番)に流れてしまいます。AJPはHTTP Upgradeに非対応のため、上記の例外が発生していました。

対処法
<Location>で個別に囲まず、ProxyPassをフラットに並べる形式に変更すると解決しました。


ProxyPass /gsession/common/connection ws://localhost:8080/gsession/common/connection
ProxyPass /gsession/ ajp://localhost:8009/gsession/
<Location /gsession/>
Require all granted
</Location>
これでProxyPass同士が最長一致(具体的なパス優先)で正しく振り分けられ、チャット用のWebSocket接続先(/gsession/common/connection)だけがTomcatのHTTPコネクタ(8080番)へ、それ以外は従来通りAJPへ転送されるようになります。curlで直接WebSocketハンドシェイクを試し101 Switching Protocolsが返ることを確認済み、既存機能の応答速度への影響もありません。

※なお、上記を直しても自己署名証明書に**SAN(Subject Alternative Name)**が含まれていないとブラウザ側で別のエラー(ERR_CERT_AUTHORITY_INVALID等)になるので、自己署名証明書を使っている場合はSAN付きで発行し直す必要がある点もあわせてご注意ください。

投稿者あ~る
最新書き込み2026/08/01 11:40:56
スレッドURLhttps://groupsession.jp/wbs/bulletin/bbs080.do?bbs010forumSid=1&threadSid=3019
 
メールマガジン登録

vertical_align_top