Apacheのインストール

Linuxで最もよく使われているオープンソースのWEBサーバーであるApacheのインストール、設定を紹介します。
今回インストールするバージョンは2.0.52です。
元々は2.0.47のバージョンがインストールされていたが、「バージョン 2.0.49 以前に, リモートからの DoS 攻撃を可能とする不具合が発見されました. 」(日本の Linux 情報 バグ・セキュリティ情報より抜粋)といった記事を見て新しいバージョンをインストールし直す事としました。
インストールする際には、既存の2.0.47環境もそのまま残し、いつでも戻せるようにしておきます。
そして、mod_sslを使ってSSL通信も出来るようにしておきます。


※apache2.2.3のインストール手順はここを参照

インストールの流れは次のようになります。
作業は全てrootで行います。
  1. ソースコードのダウンロード
  2. make
  3. httpd.confの設定
  4. 接続確認
  5. 起動スクリプトの作成
Tomcatのインストールと連携方法については→Tomcatのインストール ApacheとTomcatとの連携
  1. ソースコードのダウンロード
    アパッチのFTPサイトからソースコードをダウンロードします。
    ダウンロードしたファイルはチェックサムを利用して正規のファイルである事を確認します。
    [root src]# ftp ftp.apache.or.jp  ・・・anonymousユーザーでログインします。
    ftp> cd /pub/net/apache/dist/httpd
    ftp> lcd /usr/local/src
    ftp> get httpd-2.0.52.tar.gz
    ftp> get httpd-2.0.52.tar.gz.md5
    ftp> quit

    ダウンロードしたファイルが改竄されていない事を確認します。
    [root /root]# cd /usr/local/src
    チェックサムの確認
    [
    root src]# md5sum httpd-2.0.52.tar.gz チェックサムの計算
    eba528fa8613dc5bfb0615a69c11f053 httpd-2.0.52.tar.gz
    [
    root src]# cat httpd-2.0.52.tar.gz.md5
    MD5 (httpd-2.0.52.tar.gz) = eba528fa8613dc5bfb0615a69c11f053

    値が一致するので大丈夫そうです。

  2. make
    次はダウンロードしたファイルを展開して、make及びインストールを行います。
    デフォルトのインストール先は/usr/local/apache2です。これで良ければconfigureはオプション無しで実行します。
    しかし私の環境には古いバージョンのApache(2.0.47)がインストールされている為、インストール先は/usr/local/apache2.0.52とします(インストール先の指定には--prefixオプションを使います)。
    また、SSLも有効にしたいので、「--enable-ssl」オプションも有効にします。
    [root src]# tar zxvf httpd-2.0.52.tar.gz
    [
    root src]# cd httpd-2.0.52
    インストール先ディレクトリを変更。それ以外は変更なしです。
    [
    root httpd-2.0.52]# ./configure --prefix=/usr/local/apache2.0.52 --enable-ssl
    [
    root httpd-2.0.52]# make
    [
    root httpd-2.0.52]# make install -> /usr/local/apache2.0.52にインストールされます。

    インストール後、私の環境では以下の通りバージョンの異なる2つのディレクトリが存在します。
    使用する方を/usr/local/apache2にシンボリックリンクを張ります。(以下の例では2.0.52を使います。)
    [root httpd-2.0.52]# cd /usr/local/
    [
    root local]# ln -s apache2.0.52 apache2
    [
    root local]# ls -l
    lrwxrwxrwx 1 root root 12 Sep 13 2003 apache2 -> apache2.0.52/
    drwxr-xr-x 17 root root 4096 Sep 22 2003 apache2.0.47/   (前回インストールしたバージョン)
    drwxr-xr-x 15 root root 4096 Oct 30 14:04 apache2.0.52/  (今回インストールしたバージョン)
    ※以前のApache環境も残したかった為、このようにディレクトリを分けていますが、残す必要がなければ古いバージョンのApacheを消して、/usr/local/apache2にインストールすれば良いと思います。
  3. httpd.confの設定
    apacheの基本設定を行います。
    設定する内容は次の通りです。
    ・サーバー名
    ・不要に公開されているaliasを削除
    ・ログ出力の設定
    ・言語に関する設定
    [root httpd-2.0.52]# cd /usr/local/apache2.0.52/
    [root apache2]# vi conf/httpd.conf
    以下にhttpd.confに指定した項目について説明します。
    サーバー名を設定します。
    ServerName www.ryouto.jp

    不要なalias等を削除します。 muanualのディレクトリは公開する必要がないのですべてコメントにしておきます。
    同様にicon,cgi-binなども不要なのでコメントアウトしておきます。
    これに関しては管理者さんの判断なので、不要と考える方のみ処理して下さい。
    #AliasMatch ^/manual(?:/(?:de|en|es|fr|ja|ko|ru))?(/.*)?$ "/usr/local/apache2.0.52/manual$1"

    #<Directory "/usr/local/apache2.0.52/manual">
    # Options Indexes
    # AllowOverride None
    # Order allow,deny
    # Allow from all
    #
    # <Files *.html>
    # SetHandler type-map
    # </Files>
    #
    # SetEnvIf Request_URI ^/manual/(de|en|es|fr|ja|ko|ru)/ prefer-language=$1
    # RedirectMatch 301 ^/manual(?:/(de|en|es|fr|ja|ko|ru)){2,}(/.*)?$ /manual/$1$2
    #</Directory>

    ログ出力に関する設定を行います。
    初期状態では無条件に出力されるように、以下の通り設定されています。
    CustomLog logs/access_log common

    ここでは、次のルールを設定しています。
     ・ローカルアクセス(192.168.0.*)からのアクセスはログ出力しない。(IPアドレスは環境に合わせて指定して下さい。)
     ・ワームからのアクセスと思われるログはworm_logファイルにのみ出力し、access_logには出力しない。
    #Local zone
    SetEnvIf Remote_Addr 192\.168\.0\. dontlog
    #worm
    SetEnvIf Request_URI "default\.ida" worm dontlog
    SetEnvIf Request_URI "root\.exe" worm dontlog
    SetEnvIf Request_URI "cmd\.exe" worm dontlog
    SetEnvIf Request_URI "scripts" worm dontlog
    SetEnvIf Request_URI "NULL\." worm dontlog
    SetEnvIf Request_URI "\.files" worm dontlog

    CustomLog logs/access_log common env=!dontlog
    CustomLog logs/worm_log combined env=worm

    言語に関する設定
    私の環境で使用する文字コードはSJISです。その為、この設定は外しておきます。
    この行を有効にしておくと文字化けなどが発生します。
    #AddDefaultCharset ISO-8859-1

    シグネチャ等の設定
    これは、HTTPレスポンスなどでapacheやOSの情報を出力しないようにする設定です。
    セキュリティーの為にも、むやみな情報の出力は避けるべきと思います。
    ServerTokens Prod
    ServerSignature Off

    一通りの設定が終わったら誤りが無いかチェックします。
    [root apache2]# bin/apachectl configtest <-これで設定ファイルの誤りがないかチェックします。


    SSLの設定を行うには、Apache2でmod_sslを使うの「4.秘密鍵、サーバー証明書の作成」、「5.ssl.confの設定」を参考にして下さい
    必要な設定が全て終わったら、公開するHTMLドキュメントを/usr/local/apache2.0.52/htdocsに置いて完了です。
    これ以外の場所にHTMLドキュメントを保存する場合は、httpd.confのDocumentRootを書き換えます。
      
  4. 接続確認
    次はアパッチを起動して接続確認!
    エラーがでなければOKです。早速他のマシンから接続してみてください。
    [root apache2]# bin/apachectl start <-- (SSLを利用する場合は、 bin/apachectl startssl となります。)

  5. 起動スクリプトの作成
    最後に起動用スクリプト(/etc/rc.d/init.d/httpd)を作成します。
    #!/bin/sh

    # Source function library.
    . /etc/init.d/functions

    APACHBINDIR=/usr/local/apache2/bin

    case "$1" in
        start)
            echo -n "Starting httpd: "
            ${APACHBINDIR}/apachectl start $HTTPDOPT
            echo
            touch /var/lock/subsys/httpd
        ;;
        stop)
            echo -n "Shutting down http: "
            ${APACHBINDIR}/apachectl stop
            echo
            rm -f /var/lock/subsys/httpd
            rm -f /var/run/httpd.pid
            ;;
        status)
            status httpd
            ;;
        restart)
            $0 stop
            $0 start
            ;;
        reload)
            echo -n "Reloading httpd: "
            ${APACHBINDIR}/httpd -HUP
            echo
            ;;
        *)
            echo "Usage: $0 {start|stop|restart|reload|status}"
            exit 1
    esac
    exit 0

    最後に、システム起動時に自動起動するようrunlevelの設定をしておきます。
    これは先ほど作成した/etc/rc.d/init.d/httpdにシンボリックリンクを張るだけです。
    runlevel3,5で起動、0,6の時を終了するように設定します。
    起動時の順番、終了時の順番は私の環境に依存しているので各環境に合わせて下さい。networkより遅く起動すれば問題ないと思います。
    [root rc3.d]# ln -s ../init.d/httpd S80httpd
    [root rc3.d]# cd ../rc5.d
    [root rc5.d]# ln -s ../init.d/httpd S80httpd
    [root rc5.d]# cd ../rc0.d
    [
    root rc0.d]# ln -s ../init.d/httpd K10httpd
    [root rc0.d]# cd ../rc6.d
    [root rc6.d]# ln -s ../init.d/httpd K10httpd

  6. その他の設定
    私のホームページは以前構成を整理した為、それ以前と後でURLが異なっている場合があります。
    昔のURLがお気に入り(ブックマーク)に追加されている場合、接続時に Not Found エラーになってしまいます。
    これを回避する為、リダイレクト機能を使います。
    リダイレクト機能では、以前のURLでアクセスされた場合に現在のURLへリクエストを置き換えます。
    以下の設定では、 /linux_12.htmlへのアクセス要求をhttp://www.ryouto.jp/linux/linux_12.htmlに置き換えます。
    httpd.confファイルに以下の行を追加します。
    Redirect permanent /linux_12.html http://www.ryouto.jp/linux/linux_12.html
    ”http://www.ryouto.jp/linux_12.html”とブラウザへ入力すると”http://www.ryouto.jp/linux/linux_12.html”へ接続されます。
     
    URLを置き換える機能では、リライト機能などもありますが、仕組みがだいぶ異なります。
    Redirect機能では、HTTPサーバーがクライアントへの応答としてHTTPレスポンスコード"301"と、新しいURLを通知します。これを受け取ったクライアント(ブラウザ)が通知されたURLへ再接続します。
    これに対してRewriteRuleではサーバー内部で変換され処理される為クライアントには通知されません。また、RewriteRuleでは正規表現を使った詳細な定義に従い動的にURLを書き換える事が可能です。
    リライト機能を利用するには、Apacheコンパイル時に--enable_rewriteオプションを付加する必要があったり、httpd.conf内のRewriteEngineをOnに設定しておく必要があります。

Copyright (C)2003 ryouto.jp. All Rights Reserved.