WWWサーバの構築


WWWサーバは、Windows時代から使用していて設定がわかっているRedHatプレインストールのApacheを使用しました。RedHatインストール時にperlもいっしょにインストールされるので、httpd.confを設定すれば即動くと考えたのが、にわかLinuxerの浅はかさ。おやじのコンテンツが表示されない、CGIが動かないと右往左往でした。内容については、おまけで。

本コンテンツは、2.0系が出始めたころに作成したため、ソースからインストールしていますが、最近のデストリでは2.0系が標準になってきているので、そのまま利用すればよいかと思います。こちらでは設定の考え方を参考にしてください。
但し、プレインストールのApacheはSuEXEC対応になっていることが多いので、他に誤りがないと思われるのにCGIがうまく動作しないことがあります。その場合は、、こちらを参考にしてSuEXECのまま設定していくか、取り敢えずSuEXECをやめて設定するか検討してください。初めてApacheを動かされるなら取り敢えずSuEXECを停止して動作させ、その後にSuEXEC化されてはどうでしょうか?

設定が完了したら、WWWサーバの動作確認方法に従って動作確認してください。併せて、こちらのWWWサーバテストで、インターネット側から自宅サーバのホームページへのアクセスができるか確認しましょう。
RedHat9.0でApache2.0.46をソースからコンパイルすると、makeでkerberos関係のエラーが出るので、回避策を追加しました。(2003.06.25)

■Apache (httpd.conf) の設定

Apache2.0.46をこちらからダウンロードします。
インストールは、任意の場所にソースを展開してコンパイルします。Apache2.0は、デフォルトで全てのファイルが /usr/local/apache2/ 以下にインストールされますので、RedHat標準のApacheを保持したままインストール・実行できます。従って、何かあった時のためにも、デフォルトでインストールしました。また、Apache2.0は、Web/DAVが使えるようなので、取り敢えずインストールしておきました。但し、Apacheでの認証方法のことを勉強しないとセキュリティを保てないので、環境設定をしないで動かないようにしてあります。Web/DAVを使用する予定がないなら、素直にオプションなしで ./configure とすればいいでしょう。

RedHat系の場合、opensslがKerberosサポートの状態でコンパイルされていて、また、kerberosのヘッダが何故か/usr/kerberos/includeにあるため make でエラーが発生します。下記の赤字のように、明示してあげて下さい。

 $ tar zxfv httpd-2.0.46.tar.gz
 $ cd httpd-2.0.46

 $ export CPPFLAGS=-I/usr/kerberos/include   ※
 $ ./configure --enable-dav
 $ make
 $ su
 # make install

設定は、おやじが使っている範囲内なら1.3と全く同じ設定で何ら問題なく動作しました。但し、細部が変わっていますので、1.3のhttpd.confをコピーするわけにはいきません。設定し直しが必要です。主な変更点は、Server Typeの指定はなくなり、デーモン起動のみになったこと。(1.3のデフォルトはstandaloneなので、inetd起動に変更していなければ関係ない。) その他にも変更がありますが、おやじはよくわかりません。また、全てのファイルが/usr/local/apache2/ 配下にあるので、logファイル等の指定が相対表現に変わっています。また、何か問題があれば、/usr/local/apache2/ 以下を消すだけでアンインストールできますので、むやみにインストール場所は変更しないほうがいいと思います。

当然ですが、2.0を起動する前にデフォルトのデーモンを止めることを忘れずに。逆に、デフォルトのデーモンとカブルところが無いので、同時に起動することもできます。取り敢えず試験をするなら、ポート番号を例えば8080(proxyで使ってなければ)等にしておけば、同時起動できますので十分試験したあとで移行できます。

Apacheの設定は、/usr/local/apache2/conf/にあるhttpd.confをエディタで修正します。プロ? はコマンドラインからviでやるようですが、素人おやじはエディタでできるものはエディタでやっています。ディレクトリの構成等は、Windows版と全く同じ構成で、ルートディレクトリ配下に各人のユーザディレクトリを置く構造(http://www.aconus.com/~oyaji/といった形式でのアクセス)です。
http://www.aconus.com/でのアクセスなら、/home以下にコンテンツを置けばいい設定になっています。
設定を変更した項目は以下のとおりです。変更する場合は、失敗に備えて変更行を下の行にコピーし、元の行の先頭に「」を付加することにより、コメント行として保存しながら作業しました。 (青字は削除、赤字は追加、緑字は変更したものです。)
基本的には、Windows版と同様です。

■Apacheの起動設定

自動起動は、rc.localに起動スクリプト(/usr/local/apache2/bin/apachectl start)と書くだけでも可能ですが、SSL化を機会に、/etc/rc.d/init.d/配下に起動スクリプトを置いて、自動起動できるようにしましたので、SSL化しない場合での方法を以下に示します。起動スクリプトは、下記内容をhttpd2として記述し、/etc/rc.d/init.d/配下に置きます。

apachectlで起動すると起動はするがエラーが出るので、RedHatの起動スクリプト(/etc/rc.d/init.d/httpd)をベースに修正し、/etc/rc.d/init.d/httpd2として置きました。(2003.06.28)

#!/bin/sh
#
# Startup script for the Apache Web Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide Web server.  It is used to serve \
#              HTML files and CGI.
# processname: httpd
# pidfile: /usr/local/apache2/logs/httpd.pid
# config: /usr/local/apache2/conf/httpd.conf

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

if [ -f /etc/sysconfig/httpd ]; then
        . /etc/sysconfig/httpd
fi

# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""

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

# 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)"
        if grep -Eiq "^[[:space:]]*($GONE)" $CONFFILE; then
                echo
                echo 1>&2 " Apache 1.3 configuration directives found"
                echo 1>&2 " please read /usr/share/doc/httpd-2.0.40/migration.ht
ml"
                failure "Apache 1.3 config directives test"
                echo
                exit 1
        fi
}

# 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 /usr/local/apache2/logs/accept.lock
        return $RETVAL
}
stop() {
        echo -n $"Stopping $prog: "
        killproc $httpd
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f /usr/local/apache2/logs/accept.lock /usr/local/
apache2/logs/httpd.pid
}
reload() {
        echo -n $"Reloading $prog: "
        check13 || exit 1
        killproc $httpd -HUP
        RETVAL=$?
        echo
}

# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status $httpd
        RETVAL=$?
        ;;
  restart)
        stop
        start
        ;;
  condrestart)
        if [ -f /usr/local/apache2/logs/httpd.pid ] ; then
                stop
                start
        fi
        ;;
  reload)
        reload
        ;;
  graceful|help|configtest|fullstatus)
        $apachectl $@
        RETVAL=$?
        ;;
  *)
        echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullst
atus|graceful|help|configtest}"
        exit 1
esac

exit $RETVAL
作成したhttpd2ファイルに実行権限を付加し、ランレベルを設定した後、ランレベルが設定されたことを確認します。

 # cd /etc/rc.d/init.d
 # chmod 755 httpd2
 # /sbin/chkconfig --add httpd2
 # /sbin/chkconfig --list httpd2
 httpd    0:オフ 1:オフ 2:オン 3:オン 4:オン 5:オン 6:オフ
これで、システム起動時に自動的にApacheが起動されるようになります。rc.localで自動起動していた場合には、消去するのを忘れないように。

■logrotateの設定

/etc/logrotate.d配下にあるapacheを参考に作成するだけで、他のlog同様、1週間毎にlogrotateされます。修正する個所は、パスの設定とlogファイル名だけで、修正後にapache2として同じフォルダに登録しておきます。apache2の内容は下記のとおりです。(青字は削除、赤字は追加、緑字は変更したものです。行頭の数字は説明上、おやじが付加したものです。)
1.  /var/log/httpd/access_log /var/log/httpd/agent_log /var/log/httpd/error_log /var/log/httpd/referer_log {
2.  missingok
3.  sharedscripts
4.  postrotate
5.  /bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true
6.  endscript
7.  }

              ↓削除、追加

1.  /usr/local/apache2/logs/*_log {
2.  missingok
3.  sharedscripts
4.  postrotate
5.  /bin/kill -HUP `cat /usr/local/apache2/logs/httpd.pid 2>/dev/null` 2> /dev/null || true
6.  endscript
7.  }

■おまけ

テストページがあっさりと見えたので、さっそくコンテンツを  /home/oyaji/public_html 配下に置き表示してみましたが、見えません。原因は、管理がルーズなWindowsとしっかり管理されているLinuxの違いでした。
なお、FTPクライアントによっては、アップロード時にファイルの拡張子毎にパーミッションを設定できますので、設定して置くといいでしょう。Windowsのときは、関係無かったのでおやじは設定していませんでした。後で一つ一つ変更して、この機能に気がつくまで大変でした。

Top Pageへ