2012年04月03日

ApacheとTomcatの連携〜URLの最後にスラッシュがないときに"Not Found"になる現象の回避方法

2012/4/6 追記

表題の件ですが、Apache の httpd.conf に追記する内容をちょっと修正するだけで、目的が達成できました。

参考サイト:自宅サーバー Apacche2.2 + Tomcat5.5 の連携(補足)

やり方は、GroupSessionのサポートページ 「インストールガイド(Tomcat と Apache(連携))
に書いてある追記部分

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
<Location /gsession/>
ProxyPass ajp://localhost:8009/gsession/
</Location>

の一部のスラッシュを消します。

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
<Location /gsession >            ←ココと
ProxyPass ajp://localhost:8009/gsession   ←ココ
</Location>


これだけで、URLの最後にスラッシュがない場合でもGroupSessionのログイン画面に移行しました。

それでオッケーとなると、以下の方法は何とも間抜けなんですが、「一生懸命考えたんだね〜」と笑えて来ますんで、晒しておきます。


-------------------------------------------------------------------------------


現在、Windows Server 2008 R2 上で フリーのグループウェア "GroupSession4" を動かしています。

GroupSessionはTomcat上で動作しており、Tomcat単体でWebサーバとして機能しますので、手順通りインストールすれば、

http://サーバのアドレス/gsession:8080/

にアクセスして問題なく使用できます。

しかし、より安定的に使うためにはWebサーバを別に用意したほうがいい、という記事を読みましたので、今回Apache2.2 をインストールし、Tomcat と連携させてみました。Apache に交通整理をお願いする形ですね。

Apache の導入〜 Tomcat との連携はびっくりするほど簡単でした。
Apache をインストール後、GroupSession の公式サポートページに書かれていた通りに httpd.conf に追記してやればそれで終了です。

ネットワークの外からアクセスできないようにファイアウォールの設定をしてやって、内部の別の機械から

http://サーバのアドレス/gsession/

でアクセスできるようになりました。



この後少々問題が。

" http://サーバのアドレス/gsession/ " ならば問題ありませんが、
" http://サーバのアドレス/gsession " だと "Not Found" になってしまう。
つまり、URLの最後にスラッシュがないとアクセスができない状態です。

これを回避するために httpd.conf に追記してみたり、Tomcat側のWeb.xmlを見てみたりしたんですが状況変わらず。

error.log にはこうありました。

[Tue Apr 03 14:22:02 2012] [error] [client xx.xx.xx.xx] File does not exist: C:/Apacheのディレクトリ/htdocs/gsession


これは「トップディレクトリに gsession というファイルもフォルダもないよ」ということだと判断しました。

それならばここ、htdocs ディレクトリ内に gsession/index.html を作成し、ここから Tomcat ディレクトリ内の webapps/gsession/index.html にリダイレクトするようにすればいいんじゃね?
(GroupSession では、この index.html からログイン画面へリダイレクトされます)
と考え、やってみることにしました。

body が空のhtmlファイル
htdocs/gsession/index.html のヘッダに
<meta http-equiv="refresh" content="0 ; URL=http://サーバのアドレス/gsession/">
を追記し、保存。

Apache を再起動して、" http://サーバのアドレス/gsession " にアクセスしてみたところ、見事 GroupSession のログイン画面が表示されました。

Apache の access.log には、きちんと転送されたことが記録されていました。

xx.xx.xx.xx - - [03/Apr/2012:15:00:16 +0900] "GET /gsession HTTP/1.1" 301 237
xx.xx.xx.xx - - [03/Apr/2012:15:00:16 +0900] "GET /gsession/common/cmn001.do HTTP/1.1" 200 4573


・・・もっと簡単な方法があると思うんだけどな〜。かなり恥ずかしいやりかたですね(^_^;)

posted by nambei-x at 15:47| Comment(0) | TrackBack(0) | PC・ネット関連 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/262046989
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。