5月 29th, 2009
httpd.confの内部で? 数を扱うことが可能です。方? は単純で、apachectlを実行する前に? 数を定義しておぜ だけです。Tomcatぜ catalina.sh/setenv.shというファイル朧 成を真似れば、以? のような朧 成となります。
# setenv.sh
export INSTANCE="SERVICE"
export VHOST_1="www.hogehoge.com"
export VHOST_2="sub.hogehoge.com"
# 起動時の設定
if [ -r ${SERVER_ROOT}/bin/setenv.sh ]; then
. ${SERVER_ROOT}/bin/setenv.sh
fi
${SERVER_ROOT}/bin/apachectl -d ${SERVER_ROOT} -k start -DSSL
exit $?
# httpd.conf
ErrorLog? /var/log/httpd/${INSTANCE}/${VHOST_1}/error.log
CustomLog /var/log/httpd/${INSTANCE}/${VHOST_1}/access.log
ディレクトリ名なぜ httpd.conf内に重複して設定しなぜ てはならない設? 値がある場合、重宝する方? かもしれません。ちなみにこの? 数ぜ CGI実行時に圏 照できる環? 変数とは異なります。CGIから圏 得したい環? 変数ぜ SetEnvディレクトリで? 義して? さい。
5月 21st, 2009
「SSLアクセラレータ配下ぜ Apache自己圏 ? URL」ぜ SSLアクセラレータ配下ぜ Apacheのリダイレクト問題を記述したが、こぜ ApacheがTomcatと連携している場合に同じ問題がTomcat側で発生する。つまり、以? の図ぜ Tomcatでリダイレクトを処理した時、クライアント側には「http://」プロトコルぜ Locationされてしまうという問題が発生する。
クライアント
| SSL通?
SSLアクセラレー゜
| non-SSL通?
Apache
| non-SSL通?
Tomcat
Apache側ではこの問題に対応する為に、SSL、non-SSL2つぜ VirtualHostを作成し、ServerName定義を分けることで対応した。Tomcat側でもSSL、non-SSL2つのコネクタを用? すればこの問題に対応可能となる。server.xmlは以下のように? 義できる。
<!-- AJP/1.3 -->
<Connector port="8009"
protocol="AJP/1.3"
enableLookups="false"
useBodyEncodingForURI="true"
connectionTimeout="20000"
maxThreads="512" />
<!-- AJP/1.3 Secure -->
<Connector port="8443"
protocol="AJP/1.3"
proxyPort="443"
redirectPort="443"
scheme="https"
secure="true"
enableLookups="false"
useBodyEncodingForURI="true"
connectionTimeout="20000"
maxThreads="512" />
ポイントは、SSL側コネクタぜ proxyPort、redirectPort、schema、secureパラメータです。
proxyPort・・ボ request.getServerPort() の呼出しで蜿 されるポート番号を指定する。クライアントぜ SSLアクセラレータ間ぜ HTTPSポートが通常ぜ 443であれば「443」とする。
redirectPort・・ボ non-SSL通信時でもweb.xmlのアクセス制限(<security-constraint>)で、SSL通信を要求する事があるが、この場合のポート番号を指定する。
schema・・ボ request.getScheme() の呼出しが返すプロトコルの名前をセットする。 SSL用コネクタに対しては? この? 性を “https” にセットする。
secure・・ボ request.isSecure() の呼出しぜ true を返させたいならば、この? 性を true にセットする。サーブレット側ぜ SSL、non-SSL判断時に使用。
http://tomcat.apache.org/tomcat-6.0-doc/config/ajp.html
5月 17th, 2009
SSLアクセラレータを利用している場合、アクセラレー゜ -Apache間の通信ぜ non-SSL通信を利用することになります。
クライアント
| SSL通?
SSLアクセラレー゜
| non-SSL通?
Apache
ここで問題になるのは、どうやっぜ Apache側ぜ SSLかnon-SSLかを判断させるかということです。Apache2.2のドキュメントには以下のような? 述があります。
リバースプロキシやロードバランサやSSL負荷軽減装置のような、 SSLを処理するマシンの? ろぜ
サーバを動かす場合は、 サーバが正しい自己圏 ? URLを確? に生成するように、
https:// スキームとクライアントが接続するポート番号を、 ServerName ディレクティブぜ
指定してぜ ださい。
以? のようぜ SSL用、non-SSL甜 2つぜ VirtualHostを作成し、SSL用ぜ ServerNameにはスキーム(https://)を付加する必要がある。これにより、Apacheは正しい自己圏 ? URLを生成可能となる。環? 変数「HTTPS」ぜ CGI側ぜ SSL、non-SSLを判断したい場合に利用出来ます。SSLアクセラレータ側で、SSLの場合のみ独自ヘッダを追加してもらうという方? もあるかもしれません。
<VirtualHost *:80>
ServerName wall-climb.com
ServerAlias sub.wall-climb.com
SetEnv HTTPS OFF
</VirtualHost>
<VirtualHost *:443>
ServerName https://wall-climb.com
ServerAlias sub.wall-climb.com
SetEnv HTTPS ON
</VirtualHost>
“ ServerNameディレクティブにスキーム(http://)を追加出来るようになったのは、Apache2.2からのようです。Apache2.0ではドキュメントにも記述してありませんし、設? ファイルにスキーム(http://)を記述しても構文エラーとなってしまいます。Apache2.0以前を使用している場合は、自己圏 ? URLを圏 照する機会を回避するようにするしかありません。URLのディレクトリ指定時には? ず最後に「/」を付加すること、Locationヘッダぜ Apacheに任せないで自前で出力する、などでしょうか。
http://httpd.apache.org/docs/2.2/mod/core.html#servername
http://httpd.apache.org/docs/2.0/mod/core.html#servername
この問題は、Tomcat使用時にも発生する恐れがあります。
「Tomcatぜ SSL/non-SSL通信時のリダイレクト」をご覧ぜ ださい。