Apacheのインストール

Linuxで最も広く使われているオープンソースのWEBサーバー、Apacheのインストール・設定を紹介します。
今回インストールするバージョンは2.2.3です。
元々は2.0.52(2.0.52のインストール手順はここ)のバージョンのものを使用していたのですが、Apacheを最新のものに入れ替えることにしました。


インストールの流れは次のようになります。
作業は全てrootで行います。
  1. ソースコードのダウンロード
  2. make
  3. httpd.confの設定
  4. 接続確認
  5. 起動スクリプトの作成

Tomcatのインストールと連携方法については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.2.3.tar.gz
    ftp> quit

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

    インストール後、私の環境では以下の通りバージョンの異なる2つのディレクトリが存在します。
    使用する方を/usr/local/apache2にシンボリックリンクを張ります。(以下の例では2.2.3を使います。)
    [root httpd-2.2.3]# cd /usr/local/
    [
    root local]# ln -s apache2.2.3 apache2
    [
    root local]# ls -l
    lrwxrwxrwx 1 root root 11 Nov 26 23:28 apache2 -> apache2.2.3/
    drwxr-sr-x 17 root root 4096 Nov 26 23:27 apache2.2.3/   (今回インストールしたバージョン)
    drwxr-xr-x 15 root root 4096 Oct 30 14:04 apache2.0.52/  (インストールしたバージョン)
    ※以前のApache環境も残したかった為、このようにディレクトリを分けていますが、残す必要がなければ古いバージョンのApacheを消して、/usr/local/apache2にインストールすれば良いと思います。
  3. httpd.confの設定
    apacheの基本設定を行います。
    以前のバージョンのApacheと比べると随分と楽になっています。
    基本的には、大抵の設定は初期状態で無効なので、必要な機能だけを有効にしていきます。(以前は、逆でした。)
    設定する内容は次の通りです。
    ・基本情報(管理者、サーバー名)の設定
    ・ログ出力の設定
    ・不要なAliasの削除
    ・SSLに関する設定
    [root httpd-2.2.3]# cd /usr/local/apache2
    [root apache2]# vi conf/httpd.conf
    以下にhttpd.confに指定した項目について説明します。
    ServerAdminには管理者のメールアドレスを、ServerNameにはサーバー名を設定します。
    ServerAdmin webmaster@ryouto.jp
    ServerName www.ryouto.jp



    私の環境ではcgiを使用する予定は無い為、cgiのAliasは無効にしました。
    自身の環境に合わせて設定して下さい。
    <IfModule alias_module>
      
    (省略)
    #      ScriptAlias /cgi-bin/ "/usr/local/apache2.2.3/cgi-bin/"
    →行の先頭に#を記入することで、その行を無効にできます。

    </IfModule>

    以前のバージョンと違い、デフォルト設定ではWEBからマニュアルを読むことができません。
    必要な場合には、以下の1行を有効にします。
    # Local access to the Apache HTTP Server Manual
    #Include conf/extra/httpd-manual.conf
    ← このコメント(#)を削除します。


    ログ出力に関する設定を行います。
    初期状態では無条件に出力されるように、以下の通り設定されています。
    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

    次に別ファイルを編集します。
    シグネチャ等の設定はこのファイルで設定します。(以前のバージョンではhttp.confで設定していました。)
    [root httpd-2.2.3]# cd extra/
    [root extra]# vi httpd-default.conf

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

    httpd-default.confを編修した場合、httpd.confの中の以下の行のコメントを外します。
    # Various default settings
    Include conf/extra/httpd-default.conf
    ← このコメント(#)を削除します。


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

    必要な設定が全て終わったら、公開するHTMLドキュメントを/usr/local/apache2/htdocsに保存して完了です。
    これ以外の場所にHTMLドキュメントを保存する場合は、httpd.confのDocumentRootを書き換えます。
      
  4. 接続確認
    次はアパッチを起動して接続確認!
    エラーがでなければOKです。早速他のマシンから接続してみてください。
    [root apache2]# bin/apachectl start 

  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

    作成したファイルには実効権限を与えます。
    [root init.d]# chmod +x httpd

    最後に、システム起動時に自動起動するよう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)2006 ryouto.jp. All Rights Reserved.