CentOS 5/apache2.2系



前書き (執筆:2008/09/09)

このページではapacheをapache公式サイト:The Apache HTTP Server Projectからソースファイル(tar.gz)を入手してインストールする方法について記載しています。

2.2系最新バージョンは 執筆時点で2.2.9 になります。
自分の環境に合わせて 2.2系 2.0系 1.3系 を選択してください。

ソースファイルの入手

最新のソースファイル(tar.gz.)を取得します。
ここではKDDI Labsのミラーサーバーを使用しています。
保存先および展開(解凍)するディレクトリを /usr/local/src/ 配下とします。
必要に応じてディレクトリ権限を行っておいてください。

$ cd /usr/local/src/
$ wget ftp://ftp.kddilabs.jp/infosystems/apache/httpd/httpd-2.2.9.tar.gz

下記のように処理されます。

--14:43:34--  ftp://ftp.kddilabs.jp/infosystems/apache/httpd/httpd-2.2.9.tar.gz
           => `httpd-2.2.9.tar.gz'
ftp.kddilabs.jp をDNSに問いあわせています... 192.26.91.193, 2001:200:601:10:206:5bff:fef0:466c
ftp.kddilabs.jp|192.26.91.193|:21 に接続しています... 接続しました。
anonymous としてログインしています... ログインしました!
==> SYST ... 完了しました。    ==> PWD ... 完了しました。
==> TYPE I ... 完了しました。  ==> CWD /infosystems/apache/httpd ... 完了しました。
==> SIZE httpd-2.2.9.tar.gz ... 6396996
==> PASV ... 完了しました。    ==> RETR httpd-2.2.9.tar.gz ... 完了しました。
長さ: 6396996 (6.1M)

100%[==============================================>] 6,396,996   1.54M/s   in 4.0s

14:43:38 (1.51 MB/s) - `httpd-2.2.9.tar.gz' を保存しました [6396996]

ソースファイルの展開

取得したソースファイルを展開します。

$ tar xzf httpd-2.2.9.tar.gz


httpd-2.2.9 という名前のディレクトリが作成され、その配下に展開(解凍)されます。
ディレクトリ下に移動します。

$ cd httpd-2.2.9


コンフィグ

次にコンフィグを行いますが、自分の環境、作成したいWeb環境に応じて様々なオプションを設定してください。
オプションについては公式サイト:コンパイルとインストールを参考にするといいでしょう。

ここでは

  • rewriteモジュールを有効
  • SSL(https)を有効
  • WevDAVを無効

のオプションを指定しています。
SSLを使用するためには openssl 関係のモジュールが必要になります。
事前に別途インストールしておく必要があります。
ここでは openssl 関係のインストールについては割愛します。
インストール先を特に指定しない場合は /usr/local/apache2 配下にインストールされます。
インストール先を指定する場合は --prefix= オプションを使用してください。

$ ./configure \
 --enable-rewrite \
 --enable-ssl \
 --disable-dav \
 -with-included-apr

注意

checking for APR-util... yes
configure: error: Cannot use an external APR-util with the bundled APR

というエラーがでた場合、APRのオプション指定が正しくない、または別のオプションが必要な場合です。
下記のオプションを環境に合わせて使用してください。

  • -with-bundled-apr
  • -with-included-apr
  • -with-internal-apr

コンフィグを開始すると下記のようになります。

checking for chosen layout... Apache
checking for working mkdir -p... yes
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu

Configuring Apache Portable Runtime library ...
  ・
  ・
config.status: creating build/rules.mk
config.status: creating build/pkg/pkginfo
config.status: creating build/config_vars.sh
config.status: creating include/ap_config_auto.h
config.status: executing default commands


コンパイル・インストール

エラー表示がなく、正常にconfigureが終了したら、コンパイル(make)を行います。

$ make

コンパイルを開始すると下記のようになります。

Making all in srclib
  ・
  ・
make[1]: ディレクトリ `/usr/local/src/httpd-2.2.9' から出ます

エラー表示もなく、正常にmakeが終了したら、インストールを行います。
インストールを開始するにあたり root になり、展開したディレクトリに移動します。

$ su -
Password: [パスワード入力]
# cd /usr/local/src/http-2.2.9
# make install

下記のように処理されます。
[root@cent httpd-2.2.9]# make install

Making install in srclib
make[1]: ディレクトリ `/usr/local/src/httpd-2.2.9/srclib' に入ります
Making install in apr
make[2]: ディレクトリ `/usr/local/src/httpd-2.2.9/srclib/apr' に入ります
make[3]: ディレクトリ `/usr/local/src/httpd-2.2.9/srclib/apr' に入ります
  ・
  ・
Installing configuration files
mkdir /usr/local/apache2/conf
mkdir /usr/local/apache2/conf/extra
mkdir /usr/local/apache2/conf/original
mkdir /usr/local/apache2/conf/original/extra
Installing HTML documents
mkdir /usr/local/apache2/htdocs
Installing error documents
mkdir /usr/local/apache2/error
Installing icons
mkdir /usr/local/apache2/icons
mkdir /usr/local/apache2/logs
Installing CGIs
mkdir /usr/local/apache2/cgi-bin
Installing header files
Installing build system files
Installing man pages and online manual
mkdir /usr/local/apache2/man
mkdir /usr/local/apache2/man/man1
mkdir /usr/local/apache2/man/man8
mkdir /usr/local/apache2/manual
make[1]: ディレクトリ `/usr/local/src/httpd-2.2.9' から出ます

エラー表示がなく、上記のように終わればインストールは正常終了しました。

基本設定

このままでは起動しませんので、必要最低限の設定を行う必要があります。
設定方法 httpd.conf 他? に基本的な設定方法抜粋したものをまとめましたので、参考にして設定を行ってください。

apache起動

ここまでで設定ファイルの修正が完了です。
設定した内容が正しい確認できます。

# /usr/local/apache2/bin/apachectl -t
Syntax OK

と表示されれば準備完了です。
もし記述ミスなどがあれば、ファイル名と行番号が表示されますので、適切に修正してください。

APACHEを起動してみましょう

# /usr/local/apache2/bin/apachectl start  

プロセスを確認してみます。

# ps -aef | grep httpd
root     24144     1  0 17:13 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
nobody   24145 24144  0 17:13 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
nobody   24146 24144  0 17:13 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
nobody   24147 24144  0 17:13 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
nobody   24148 24144  0 17:13 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
nobody   24149 24144  0 17:13 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
root     24153 17054  0 17:14 pts/0    00:00:00 grep httpd

一番上が親プロセスになります。
合計5つの子プロセスが起動していることになります。
公開するサイトの性質、トラフィックなどを考慮して、この数を増やすこともできます。

自動起動設定

起動スクリプトをコピーします。

# cp /usr/local/src/http-2.2.9/buid/rpm/httpd.init /etc/rc.d/init.d/http


コピーした /etc/rc.d/init.d/http は RPM(パッケージ)用に設定されていますので一部修正します。

# vi /etc/rc.d/init.d/http

注:修正箇所のみを、ここでは抽出して記述します。
26行目 ディレクトリ名を修正。
基本的にコメント欄なので修正しなくても可

# processname: httpd
# pidfile: /var/run/httpd.pid
# config: /etc/httpd/conf/httpd.conf
  ↓
# processname: httpd
# pidfile: /usr/local/apache2/logs/httpd.pid
# config: /usr/local/apache2/conf/httpd.conf


44、45行目

# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/sbin/apachectl
httpd=${HTTPD-/usr/sbin/httpd}
prog=httpd
RETVAL=0
  ↓
# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/apache2/bin/apachectl
httpd=${HTTPD-/usr/local/apache2/bin/httpd}
prog=httpd
RETVAL=0


51行目

# check for 1.3 configuration
check13 () {
	CONFFILE=/etc/httpd/conf/httpd.conf
	GONE="(ServerType|BindAddress|Port|AddModule|ClearModuleList|"
	GONE="${GONE}AgentLog|RefererLog|RefererIgnore|FancyIndexing|"
	GONE="${GONE}AccessConfig|ResourceConfig)"
  ↓
# check for 1.3 configuration
check13 () {
	CONFFILE=/usr/local/apache2/conf/httpd.conf
	GONE="(ServerType|BindAddress|Port|AddModule|ClearModuleList|"
	GONE="${GONE}AgentLog|RefererLog|RefererIgnore|FancyIndexing|"
	GONE="${GONE}AccessConfig|ResourceConfig)"


72行目
常にSSLを使った起動を行う場合はオプションに -D SSL を追記。

# The semantics of these two functions differ from the way apachectl does
# things -- attempting to start while running is a failure, and shutdown
# when not running is also a failure.  So we just do it the way init scripts
# are expected to behave here.
start() {
        echo -n $"Starting $prog: "
        check13 || exit 1
        daemon $httpd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch /var/lock/subsys/httpd
        return $RETVAL
}
  ↓
# The semantics of these two functions differ from the way apachectl does
# things -- attempting to start while running is a failure, and shutdown
# when not running is also a failure.  So we just do it the way init scripts
# are expected to behave here.
start() {
        echo -n $"Starting $prog: "
        check13 || exit 1
        daemon $httpd -D SSL $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch /var/lock/subsys/httpd
        return $RETVAL
}

83行目

stop() {
        echo -n $"Stopping $prog: "
        killproc $httpd
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/httpd /var/run/httpd.pid
}
  ↓
stop() {
        echo -n $"Stopping $prog: "
        killproc $httpd
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/httpd /usr/local/apache2/logs/httpd.pid
}

110行目

  condrestart)
        if [ -f /var/run/httpd.pid ] ; then
                stop
                start
        fi
        ;;
  ↓
  condrestart)
        if [ -f /usr/local/apache2/logs/httpd.pid ] ; then
                stop
                start
        fi
        ;;

以上で修正終了です。

serviceとして組み込みます。

# chkconfig --add http

自動起動設定をします。

# chkconfig httpd on

以上で自動起動の設定が完了です。

自動起動のスクリプトが正しく設定されたか確認します。

# /etc/rc.d/init.d/httpd start
httpd を起動中:                                            [  OK  ]

以上でAPACHEの自動起動設定は終了です。

ログローテーション設定

ログはほっておくとどんどん肥大化しますので定期的に分割するように設定をしてみましょう。
大きく分けて2種類の方法があります。

  • システムに任せる方法(logrotateを使用する方法)
  • apache自体に任せる方法(httpd.conf内にrotatelogsを指定する方法)

どちらも一長一短です。
ここでは、システムに任せる方法(logrotateを使用する方法)について記載します。

システム自体のログローテーションの設定ファイルは /etc/logrotate.d にあります。
ここで httpd というファイルがなければソースファイルを展開したディレクトリ内にありますのでコピーします。

# cp /usr/local/src/http-2.2.9/buid/rpm/httpd.logrotate /etc/logrotate.d/http


ディレクトリ名を下記のように修正してください。
なければ新規に作成します。。

/usr/local/apache2/logs/*log {
    missingok
    notifempty
    sharedscripts
    postrotate
       /bin/kill -HUP `cat /usr/local/apache2/logs/httpd.pid 2>/dev/null` 2> /dev/null || true
    endscript
}

以上でapacheの設定は終了です。

/



Last-modified: 2015-04-23 (木) 15:33:39 (1275d)