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へ

AltStyle によって変換されたページ (->オリジナル) /