質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

Seasar2

Seasar2はJ2EE/Java EEでの大規模な開発を効率良く行なうためのフレームワークです。 必要な設定ファイルを従来のものと比べて少なくし、依存性を分離して記述しています。 そのため、生産性の高いプログラム開発が可能です。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

2回答

14846閲覧

URLにポート番号を指定しないとWebSocketのサーバーへのコネクションが閉じてしまう

mucho0623

総合スコア31

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

Seasar2

Seasar2はJ2EE/Java EEでの大規模な開発を効率良く行なうためのフレームワークです。 必要な設定ファイルを従来のものと比べて少なくし、依存性を分離して記述しています。 そのため、生産性の高いプログラム開発が可能です。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2014/11/27 02:35

Apache2.4.9 + Tomcat7.0.54 + Java7 + seasar2で
リアルタイムチャット機能をWebSocketを使用して実装してます。

URLに「http://www.XXXX.local:8080/【プロジェクト名】/chat」
といったようにポート番号を指定すると、
正常に起動するのですが、

http://www.XXXX.local/【プロジェクト名】/chat」
とポート番号なしでアクセスすると数秒後にWebSocketのコネクションが閉じてしまいます。

ちなみにホストはhostsで

#ローカル環境
127.0.0.1 www.XXXX.local

といったように設定しております。

8080 は直接Tomcatにリクエストしているのに対し、
8080 がないのは、経由としては Apache → Tomcat になるので、
その連携部分で何か問題があるのかもしれません。

Apache → Tomcatの連携のさいに
デフォルトで8009番ポートに設定
されているのは知ってます。

http://www.XXXX.local/【プロジェクト名】/chat」
とやって正常に起動するようにするには
どうしたらいいかわかりません。

もちろん、他の機能も同様に
http://www.XXXX.local/【プロジェクト名】/【他機能のURL】」
ポート番号なしで干渉しないようにしたいです。

以上、宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

mod_proxy_wstunnelを利用してみてください。

投稿2014/11/27 10:09

omochi

総合スコア410

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TaMaMhyu

2014/12/01 02:43

追記の内容はこちらのモジュールを使用する参考サイトでしょうか? WebSocketをプロキシするモジュールなので、Node.jsかどうかは関係ないと思います。 Java側で起動しているWebSocketのURLをプロキシする設定になるはずです。
TaMaMhyu

2014/12/01 02:46

Java側のWebSocketの起動コード次第なので、その部分のコードが開示されていないと具体的な記述例は出せないかと思います。
mucho0623

2014/12/01 04:52

毎回説明足らずで申し訳ございません。 参考サイトは「mod_proxy_wstunnel」を使用する例です。 WebSocketのコネクションURLは こちらの場合ですと、 「ws://www.XXXX.local:8080/chat/loadMessage」または、 「wss://www.XXXX.local:8080/chat/loadMessage」 となります。 ChatAction.javaでサーバーのエンドポイントは以下のように記述してます。 ChatAction.java ---------------------------------------------------------------------------------------- @ServerEndpoint("chat/loadMessage") public class ChatAction {      ・      ・      ・ } ----------------------------------------------------------------------------------------
TaMaMhyu

2014/12/01 05:19

悩むところはない気がするのですが、WebSocketのプロキシ設定だけ書くとこんな感じでしょうか? ProxyPass /chat/loadMessage/ ws://www.XXXX.local:8080/chat/loadMessage/ ProxyPassReverse /chat/loadMessage/ ws://www.XXXX.local:8080/chat/loadMessage/
mucho0623

2014/12/01 06:35

あ、そんな感じでいいのですね。。 素早い回答ありがとうございます。 やってみます。
mucho0623

2014/12/17 02:27

お久しぶりです。 Apacheでのwebsocketのプロキシ設定がいまだにわかりません。(汗 ----------------------------------------------------------------------------------------- ProxyPass /chat/loadMessage/ ws://www.XXXX.local:8080/chat/loadMessage/ ProxyPass /chat/ http://www.XXXX.local:8080/chat/ ProxyPassReverse /chat/loadMessage/ ws://www.XXXX.local:8080/chat/loadMessage/ ProxyPassReverse /chat/ http://www.XXXX.local:8080/chat/ ----------------------------------------------------------------------------------------- とやって、「http://www.XXXX.local/chat」 でアクセスすると、数秒後にコネクションがcloseしてしまします。。。 ちなみに、 httpd.confの「mod_proxy_wstunnel」の記述してあるコメントアウトされている行を外すだけでよいんですよね。。
TaMaMhyu

2014/12/17 02:46

Apacheに実際にモジュールはロードされてるんですよね? (再起動とかをしてないとかはないですよね…) そこに書かれているmod_proxy_wstunnel.soのファイルは存在しますよね? それ以外に考えられるところはこの情報だけだとよくわかりませんね…
mucho0623

2014/12/17 03:06

Apache24\modules\ に「mod_proxy_wstunnel.so」存在してます。 設定の記述が間違っているのでしょうか。。。 他に情報といいますと。。
mucho0623

2014/12/17 07:28

解決しました! 以下で通りました! ------------------------------------------------------------------------------------------- ProxyPass /chat/loadMessage ws://localhost:8080/chat/loadMessage ProxyPass /chat/ ajp://localhost:8009/chat/ ProxyPass / ajp://localhost:8009/ ProxyPassReverse /chat/loadMessage ws://localhost:8080/chat/loadMessage ------------------------------------------------------------------------------------------- ありがとうございます!
guest

0

ApacheでWebSocketをプロキシするのは厳しいのではないかと思いますが…
普通のプロキシであれば、一応、対応したモジュールはあるようですが、Apacheのバージョンによっては自前でモジュールをビルドしないといけないかもしれません。

投稿2014/11/27 02:49

TaMaMhyu

総合スコア1356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問