Apache 2.0.39 を使ってみる
SERVER
suEXEC 付きで Apache 2.0.39 をインストールしてみました。
若干、設定方法なんかが違っていたのでそのあたりを書いてみました。
ことはじめ
Apache 1.3.17 のセキュリティーホールを突くワームなどもあるとのことで、ちょいと対策を講じてみることにしました。
いままで、幾度か Apache 1.3.17 に関するセキュリティホールを耳にはしていたのですけど、あいにく UNIX 用の Microsoft FrontPage Server Extensions をインストールしていたため、とりあえずは Apache 1.3.17 で通してきていました。
けれどのっとられると何かと迷惑なので、この機に Apache 2.0.39 を試してみることにしました。
とはいっても、アップロードには FrontPage Server Extensions を使いたい…。
幸い、アップロード時には SSL 接続を利用していたので、ならば、SSL の方は Apache 1.3.17 で、残りは Apache 2.0.39 でやってみよう、という運びになりました。
Apache のインストール
Apache 2.0.39 のインストールを行います。
今回は、http://www.apache.org/ より httpd-2.0.39.tar.gz というファイルを取得して、それをインストールすることにしました。
まずはこれを展開します。
展開したソースは /usr/local/src/ ディレクトリ内にダウンロードしたものと想定して話を進めていきます。
cd /usr/local/src
tar xvzf httpd-2.0.39.tar.gz
展開が終わったら、出来上がった httpd-2.0.39/ という名のディレクトリへ入って、./configure を実行します。今回も suEXEC を使用したかったので、suEXEC 系のオプションも添えて実行してみることにしました。
apache 2 系では、若干 configure に渡す値が変わっているようです。
いままでの --suexec-***** も、--with-suexec-***** というように変わっていました。また、--server-uid=**** と --server-gid=**** もなくなっていて、あるのかもしれませんけど、代わりになるオプションが見つかりませんでした。
cd httpd-2.0.39/
./configure --enable-suexec --with-suexec-caller=apache --with-suexec-uidmin=1000 --with-suexec-gidmin=1000 --with-suexec-docroot=/home/htdocs/
今回は、以前の Apache 1.3.17 と一緒に動かすため、Apache 2.0.39 を別のディレクトリにインストールしなくてはいけないのですけど、Apache 2 系はディフォルトで /usr/local/apache2/ へインストールされるため、あえて --prefix=**** はつけませんでした。
これで、Makefile が自動的に出来上がります。
これで下準備が終わったので、続いてコンパイルとインストール作業に入ります。次のような手順で、コンパイルとインストールを行います。
make
make install
これでインストールは完了しました。
Apache 2.0.39 は、ディフォルトで /usr/local/apache2/ ディレクトリにインストールされます。
設定の微調整と起動
以前の設定から複製…
まずは、CGI を使用できるように、/usr/local/apache/conf/httpd.conf の編集を行いました。これで CGI が起動できる準備ができます。
ユーザのホームディレクトリ周りの設定は、どうやらはじめから設定されているようだったので、特に変更は加えませんでした。
AddHandler cgi-script .cgi
さて、今回は Apache 1.3.17 からの引越しです。
Apache 1.3.17 の設定ファイル /usr/local/apache/conf/httpd.conf から、設定している公開用の仮想ホスト <VirtualHost> の設定を全てコピーして、Apache 2.0.39 の設定ファイル /usr/local/apache/conf/httpd.conf へ移しました。
そして、既存の Apache 1.3.17 の方の設定で 80 番ポートに関連する情報を削除して、いったん停止した後、改めて SSL 有効で起動させました。
/usr/local/apache/bin/apachectl stop
/usr/local/apache/bin/apachectl startssl
続いて Apache 2.0.39 の起動です。こちらは SSL モードは必要ないので、普通に起動させてみました。
/usr/local/apache/bin/apachectl start
suEXEC 周りの微調整…
するとここでエラー発生です。
どうやら <Directory> 内には User ディレクティブが利用できないようです。この設定は、仮想ホストが suEXEC の際に使用するアカウント情報のため、なんとか設定しなくてはなりません。
調べてみたところ、どうやら SuexecUserGroup というディレクティブがその役割を示すようです。これは続けて、ユーザ名、グループ名という値を与えます。
SuexecUserGroup user group
いままでの、User と Group ディレクティブを上記のように置き換えることで、ユーザ名 "user" で、グループ名 "group" のアカウントが、suEXEC の際に利用されるようになるようです。
仮想ホストの設定し忘れ…
そしてもう一度起動させようとすると、今度も再び <VirtualHost> 周りでエラーが発生しました。今度はなにやら NameVirtualHost の設定がないとのことです。
調べてみると、新しい Apache 2.0.39 の方の設定ファイルでは、NameVirtualHost * 行がコメントアウトされていました。
NameVirtualHost 192.168.0.1
事実とは違いますけど、こんな感じで改めて書き加えてみました。
文字セットの設定…
さて、これで改めて Apache 2.0.39 を動かしてみると、しっかりと Apache 1.3.17 と同時に起動することができました。
ちゃんと https のほうでも、通常の http の方でも、しっかりとページを見ることが…、と思ったら、なにやら Apache 2.0.39 の方は文字化けを起こしてしまっていました。
ブラウザのエンコード設定を見てみると、【西ヨーロッパ言語 (ISO) 】 になっています。
ソースを見ても、META にはちゃんと SJIS 設定が…。これはきっと、サーバの設定に何かあるのでしょう…。
と調べてみると、AddDefaultCharset ISO-8859-1 という記載がありました。これを ISO-2022-JP に変えてみたところ、ちゃんと文字化けせずにページを表示することができました。
ふと思ったのですけど、ページ自体は JIS ではなく SJIS で書かれているような…。
ということで設定ファイルのはじめから書かれていた AddCharset を眺めてみると、shift-jis なるものがありました。
AddDefaultCharset shift-jis
こちらのほうがよさそうだったので、AddDefaultCharset sift-jis に書き換えてみました。もちろん、こちらでも文字化けせずに表示することができました。