Apache+SSL

Apache2を入れたり1.3を入れたりと普段は慌しいのですが、Apache2ではmod_sslを別途手に入れなくてもSSL実装可能だった。(そういえば2年前はApache1.3+mod_sslでインストールの仕方が分けわかんなくて2にした気がする)

# ./configure –prefix=/usr/local/apache –enable-ssl –enable-module=so
# make
# make install

これが1.3だとApacheのバージョンに一致するmod_sslを手に入れてmod_ssl内でApacheのmakeも行う。別にsslが必要なくてもバイナリで配布されているEAPIモジュールを使用したいときもこれを行う必要があり苦労しました。1.3の場合はこんな感じです。

Apache+mod_SSLのインストール方法

mod_SSLのコンフィグ(mod_SSLのソース内で実行)

# ./configure
–with-apache=../apache_1.3.33
–with-ssl=/usr/
–enable-module=so
–prefix=/usr/local/apache
–enable-module=ssl

# 説明
–with-apache=(Apacheソースのディレクトリ)
–with-ssl=(sslのライブラリが存在する場所)
–enable-module=so(Apache用のコマンド)
–prefix=(Apache用のコマンド)
–enable-module=ssl(Apache用のコマンド)

Apacheのインストール

# cd ../apache_1.3.33
# make
# make install

Apacheの自動起動

FreeBSDの場合はとても単純で
# cp /usr/local/apache/bin/apachectl /usr/local/etc/rc.d/httpd.sh

のみでOK。

Red Hat Linuxの場合は以下のようにします。

# cp /usr/local/apache/bin/apachectl /etc/rc.d/init.d/httpd

そしてコピーしたhttpdファイルの先頭部分に以下を追加します。
# chkconfig: 3 85 15

そしてchkconfigコマンドを実行。これはrootユーザーでないと使えなかったと思います。

# chkconfig –add httpd

追加できたかどうかlistで確認

# chkconfig –list httpd

chkconfigを使用しない場合は下記のコマンドを順番に実行することで可能です。
# cp /usr/local/apache/bin/apachectl /etc/rc.d/init.d/httpd
# cd /etc/rc.d/rc3.d/
# ln -s ../init.d/httpd S99httpd
# cd /etc/rc.d/rc0.d/
# ln -s ../init.d/httpd K99httpd

Sはスタート、KはKILLの意味です。その次の数字は実行優先度だったかな。

Apacheを起動する前に

昨日はデフォルトでインストールしましたが、まず起動する前にconf/httpd.confの内容をチェックします。このときに不要な設定項目は省き、セキュリティホールになりそうな項目は修正します。
私の場合、userとgroupをnobodyに設定し、OptionのIndexesは削除、ExecCGIの追加、CGIハンドラの追加を行いました。

因みにApache2.2.0に関しては、標準の状態でエラー画面上へバージョン情報を載せたり、マニュアルページのエイリアスや、index.htmlが『It works!』とだけ表示するものだったり色々と考慮されています。(もしかすると現在だけかも知れませんが…)。また言語関係の設定等あまり弄ることの無い項目は別ファイルに分離されていてhttp.conf自体はかなりスッキリしています。バーチャルホストやSSLも別ファイルになっておりました。尚、それらの別ファイルはconf/extra/の下にあります。但しmagicとmime.typesだけはconf/の下に残っています。初期状態の設定のコピーはconf/original/の下にあります。

これらの設定が完了したら、
# /usr/local/apache/bin/apachectl start
で起動します。

因みにログのローテーションはrotatelogを使用しました。Linux等ではOSにインストールされているlogrotateを使用する方法もありますが、ローテーションの度にApacheを再起動する事になるのでこちらを選択。但しrotatelogは世代管理をしないので別途過去ログを処理するプログラムを設置しないとずっと溜まり続けてスペースを圧迫します。

rotatelogを使用して毎日ログを分ける場合の設定内容。ネットではTransferLogを使ってそれを分割する例が多いのですがそれでは元々の本体がそのまま残っていて2倍スペースを圧迫するだけなので直接CustomLogに記述します。

CustomLog “|/usr/local/apache/bin/rotatelogs -l /usr/local/apache/logs/access_log.%Y-%m-%d 86400” combined

自動起動とログの区分けについてはまた明日設定します。
ログの区分けは、ワーム等からのリクエストや、favicon.ico、検索ロボット等アクセス解析には不要なアクセスを分離するために行います。