昨日のPing送信の件ですが、数件失敗していたサイトがあったものの大多数のサイトにPingを送れたようです。とりあえず一安心(^^)。
このブログの本懐であるところのWeb開発は、使用する言語を迷っている段階なので、今日はこのブログを構築する際にハマッたTomcatでサブドメインを使う方法について書いてみようと思います。
まず、ブログ構築時に私がやりたかったことは「サブディレクトリでなく、サブドメインでアクセスしたい」でした。
ドメイン名 : webkai.net
プロジェクト名 : blog
とすると、こんな感じです。
http://webkai.net/blog または http://www.webkai.net/blog
↓
http://blog.webkai.net こちらの方がいい
で、私の試行錯誤の過程
- Apacheとの連携は必須だがmod_jkを使用して以下のように書くと、Tomcatのwebapps以下のディレクトリ名をURLで指定しなければならない。
httpd.conf JkMount /* ajp13 ← ajp13ワーカへ処理を渡すURL
http://www.webkai.net/blog
- mod_jkが無理そうだから、Apacheのリバースプロキシを使おう
ProxyPass / http://localhost:8080/blog/
ProxyPassReverse / http://localhost:8080/blog/
- ダメだ、PebbleのHTMLに「/blog/themes/custom/theme.css」みたいなサブディレクトリを含んだリンクが出力されてしまう。強引だがプロキシの設定を追加しよう。
ProxyPass / http://localhost:8080/blog/
ProxyPassReverse / http://localhost:8080/blog/
ProxyPass /blog/ http://localhost:8080/blog/
ProxyPassReverse /blog/ http://localhost:8080/blog/
- ダメだ、Cookieのパスが/blogになってる。一度ここで冷静になる。
- そもそもTomcat側が、サブディレクトリでのアクセスになっているから整合性が崩れるんだ。Tomcatのドキュメントルートにプロジェクトを置く方法はないのか?
- あった。Server.xmlのHostタグ。これでTomcat側でVirtualhostっぽい構成がとれるみたいだ。
<Server port="8005" shutdown="SHUTDOWN" debug="0">
<Service name="Catalina">
<Engine name="Catalina" defaultHost="localhost" debug="0">
<Host name="localhost" debug="0" appBase="webapps" ← デフォルトのwebapps用Host unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Host name="blog.webkai.net" debug="0" appBase="blog" ← Pebble用に追加したHost xmlValidation="false" xmlNamespaceAware="false">
</Host>
</Engine>
</Service>
</Server>
これで、webappsと同じ階層にblogディレクトリを作って、その中にROOTというディレクトリを作ればそこがblog.webkai.netのルートになるのか。ふむふむ。 - Apacheから新しく作ったHostへ接続する方法が良く分からないけど、とりあえず同名のVirtualhostをApache側へも作ってみよう。
<VirtualHost *:80>
ServerName blog.webkai.net
JkMount /* ajp13
</VirtualHost>
お、動いた。
という感じです。私はこのやり方を初めて知ったのですが、みんな当たり前のようにやっているんでしょうか。
2006/09/22 リバースプロキシのURLが間違っていたため修正。