Webサーバとはクライアントから要求を受け取り、インターネットを通じ、HTMLファイルや画像ファイルをクライアントコンピュータに配信するサーバです。
HTMLのような静的コンテンツだけでなく、CGIなど、クライアントから情報を受け取って処理して返すような動的なコンテンツも利用することができます。
今回、WebサーバにApacheを使用します。Apacheは世界で共同開発されている、フリーのソフトウェアであり、現在世界で最も使われているWebサーバです。
中でも特筆すべき機能はモジュール機能です。様々なモジュールにより機能を追加したり削除したりすることができます。モジュールの追加方法は2つあり、一つははコンパイル時に組み込むモジュールを指定する方法、もう一方はDSO(Dynamic Shared Object)を使った方法です。DSOを使えばコンパイル後でもモジュールを組み込むことが可能となります。
インストールの流れは次のようになります。
作業は全てrootで行います。
ソースコードのダウンロード
コンパイル(make)
設定ファイルの編集
起動確認
起動スクリプトの作成
インストールをするにはroot権限が必要となるのでまず、rootにユーザを変更します。
su -
最初に、Apacheのソースコードをダウンロードしてきます。
多くの場合、/usr/local/src/や自分のホームディレクトリに保存します。
cd /usr/local/src/ wget http://storage.cis.k.hosei.ac.jp/pub/apache/httpd/httpd-2.0.55.tar.gz
ダウンロードしたソースはtar.gz形式で圧縮されているので、tarコマンドを使用して解凍します。
tar zxf httpd-2.0.55.tar.gz
解凍したらまず、READMEファイルとINSTALLファイルに目を通します。
cd httpd-2.0.55 less README less INSTALL
READMEにはソフトを使用する上での注意事項や説明が書いてあり、INSTALLにはインストール方法やインストールに必要となるツールが書かれています。
次にconfigureを用いて、コンパイルするときのインストールオプションを設定します。
configureの引数に--helpを与えるとそのソフトウェアのconfigureにどのような設定項目があるか見ることができます。
./configure --help
今回は説明しやすいように受講者みなさんの環境を統一するので
こちらからオプションを指定します。
インストール先を指定します。
インストールパスを指定するためのレイアウトを使用します。
レイアウトはconfig.layoutファイルに書いてあります。
レイアウトの詳細もconfig.layoutファイル内にあります。
preforkというマルチプロセッシングモジュール(MPM)を有効にします。MPMは他にworkerなどがあります。詳しくはhttp://httpd.apache.org/docs-2.0/mpm.htmlを参照してください。
全てのモジュールをダイナミックロードできる形(DSO)でコンパイルとインクルードします。このあとに--disable-MODULEとして指定したモジュールは取り除くことができます。allのほかにmostやモジュール名を=の後に置く事ができます。
コンパイルされてインストールされるモジュールを取り除きます。
DSO(Dynamic Shared Object)を有効にするにはSOモジュール(mod_so)を組み込みます。
"./configure" \ "--prefix=/usr/local/httpd" \ "--enable-layout=Apache" \ "--with-mpm=prefork" \ "--enable-modules-shared=all" \ "--enable-so" \ "--enable-rule=SHARED_CORE" \ "--enable-deflate" \ "--enable-proxy" \ "--enable-suexec" \ "--with-suexec-caller=httpd" \ "--with-suexec-logfile=/var/log/httpd/suexec_log" \ "--with-suexec-docroot=/home" \ "--disable-asis" \ "--disable-auth_anon" \ "--disable-auth_dbm" \ "--disable-dav" \ "--disable-dav-fs" \ "--disable-imap" \ "--disable-status"
configureにて設定が終了したら、makeコマンドでコンパイルを行います。
make
いよいよインストールを行います。
make install
これで、Apacheのインストールが完了しました。
次にhttpdの設定を行います。
Apacheの設定ファイルは/usr/local/httpd/conf/以下にhttpd.confというファイルがあります。
設定ファイルを大きく変更する際はバックアップを取りましょう。
今回は最初のファイルのバックアップなのでファイル名.defaultと名づけましょう。
次回からバックアップを取るときはファイル名.bakなどとつけると良いでしょう。
cd /usr/local/httpd/conf/ cp httpd.conf httpd.conf.default
今回変更するところは以下の設定です。
User nobody ↓ User httpd Group #-1 ↓ Group httpd
エラーページにここで設定したメールアドレスが表示されます。
サーバ管理者の連絡先メールアドレスを書きましょう。
ServerAdmin you@example.com ↓ ServerAdmin m04k00xx@cis.k.hosei.ac.jp
使用するドメイン名を記入します。
今回はドメインを取得しないので、自分のIPアドレスを記入します。
#ServerName www.example.com:80 ↓ ServerName 192.168.1.xx:80
多くのlogファイルは/var/log/以下に保存されます。
httpdのログファイルも/var/log/httpd/に書き出されるよう設定します。
ErrorLog logs/error_log ↓ ErrorLog /var/log/httpd/error_log CustomLog logs/access_log common ↓ CustomLog /var/log/httpd/access_log common
設定ファイルは/etc/以下にまとめて管理されています。
そのため、/etc/httpd/ディレクトリを作成し、その中にhttpdの設定ファイルのシンボリックリンクを置いてあげましょう。
mkdir /etc/httpd ln -s /usr/local/httpd/conf/httpd.conf /etc/httpd/httpd.conf
httpdを管理するユーザとグループを作成します。
groupadd -g 300 httpd useradd -g httpd -u 300 -c "Apache Daemon User" -M httpd
httpdのログファイルの保存ディレクトリを作成します。
mkdir /var/log/httpd chown httpd: /var/log/httpd
/usr/local/httpd/bin/にapachectlというhttpdの実行ファイルがあります。
オプションで引数にconfigtestを与えることでhttpd.confの設定ファイルのシンタックスチェックを行うことができます。
/usr/local/httpd/bin/apachectl configtest
エラーが起こらなければ、デーモンを開始します。
/usr/local/httpd/bin/apachectl start
これでWebサーバが動作します。
あとはドキュメントルート(デフォルトでは/usr/local/httpd/htdocs/)にファイルがあれば、表示させることができます。
次にWebブラウザでテスト用のページを見てみます。
ドキュメントルートにテスト用のhtmlファイルが置いてあるので見ることができるかチェックしてみましょう。
http://自分のIPアドレス/
「あなたの予想に反して、このページが見えているでしょうか?」
というページが見ることが出来ましたか?
表示されない場合は、下のトラブルシューティングを参考に原因を探しましょう。
htmlだけでなくCGIプログラムもテストしてみましょう。
まず、テスト用のファイルを用意しましょう。
CGIファイルを置く場所はデフォルトの場合、/usr/local/httpd/cgi-bin/です。
vi /usr/local/httpd/cgi-bin/test.cgi
#!/usr/bin/perl print "Content-type: text/plain\n\n"; print "$_=$ENV{$_}\n" for (keys %ENV);
cgiなので実行権限を持たせましょう。
chmod 755 /usr/local/httpd/cgi-bin/test.cgi
Webブラウザで作ったファイルを見てみましょう。
http://自分のIPアドレス/cgi-bin/test.cgi
下記のように表示されたら、成功です。表示されない場合は、下のトラブルシューティングを参考に原因を探しましょう。
SCRIPT_NAME=/cgi-bin/test.cgi SERVER_NAME=133.25.236.120 SERVER_ADMIN=m0xk00xx@cis.k.hosei.ac.jp HTTP_ACCEPT_ENCODING=deflate, gzip, x-gzip, identity, *;q=0 HTTP_CONNECTION=Keep-Alive, TE REQUEST_METHOD=GET HTTP_ACCEPT=text/html, application/xml;q=0.9, application/xhtml+xml, image/png, i mage/jpeg, image/gif, image/x-xbitmap, */*;q=0.1 SCRIPT_FILENAME=/usr/local/httpd/cgi-bin/test.cgi SERVER_SOFTWARE=Apache/2.0.55 (Unix) HTTP_ACCEPT_CHARSET=shift_jis, utf-8, utf-16, iso-8859-1;q=0.6, *;q=0.1 HTTP_TE=deflate, gzip, chunked, identity, trailers QUERY_STRING= REMOTE_PORT=65365 HTTP_USER_AGENT=Opera/8.01 (Windows NT 5.1; U; ja) SERVER_PORT=80 SERVER_SIGNATURE=<address>Apache/2.0.55 (Unix) Server at 133.25.236.120 Port 80</ address> HTTP_ACCEPT_LANGUAGE=ja,en;q=0.9 REMOTE_ADDR=192.168.10.1 SERVER_PROTOCOL=HTTP/1.1 PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin REQUEST_URI=/cgi-bin/test.cgi GATEWAY_INTERFACE=CGI/1.1 SERVER_ADDR=192.168.10.20 DOCUMENT_ROOT=/usr/local/httpd/htdocs HTTP_HOST=133.25.236.120
ここではWebページが表示されなかった場合への対処方法を載せています。
ブラウザのメッセージや/var/log/httpd/以下のログメッセージを頼りに問題点を特定しましょう。
ポート開放の設定が間違っているか、httpdが動作していない可能性があります。この場合、httpdにリクエストが届く前にパケットが殺されているので、Apacheのログには残りません。
404エラーです。アドレスが間違っている、もしくはファイルが存在していない可能性が高いです。
許可のないファイルにアクセスしています。この場合、Apacheのerror_log(/var/log/httpd/error_log)にエラーログが残ります。パーミッションがhttpdがアクセスできるようになっているか確認して下さい。
ログを見るには次のコマンドが便利だと思います。
tail -5 /var/log/httpd/access_log
tailはファイルの終わりの部分を表示します。今回はオプションで-5を渡しているので終わりの5行を表示します。新しいログはファイルの後ろに追加されるので、tail -5は最新の5つを表示することになります。
以下のエラーログはあくまで一例です。実際には環境等によってエラーメッセージは変わりますし、もしかしたら全く新しいエラーログが出ているかもしれません。そのような場合でもエラーメッセージをよく読み、何がエラーの原因なのか自分で考えるようにしましょう。
tail -5 /var/log/httpd/error_log
[Sat Jul 24 19:44:14 2004] [error] [client 192.168.1.2] (13)Permission denied: access to /~you/cgi-bin/index.cgi denied
このエラーの場合、you、cgi-binディレクトリまたはindex.cgiのうちのどれかがhttpdからアクセスできないようになっています。これらのパーミッションを調べてみてください。ここでのyou、cgi-bin、index.cgiなどは環境によって変わります。重要なのは(13)Permission denied: access toというエラーメッセージが多くの場合パーミッション設定のミスによって現れるということです。
最後に起動スクリプト(/etc/rc.d/init.d/httpd)を作成します。
起動スクリプトを作成することにより、マシンを再起動するごとにApacheを起動しなくても自動で起動してくれるようになります。
たいていの場合、起動スクリプトは既に用意されています。Apacheの場はソースコードディレクトリのbuild/rpmの下にhttpd.initという名前で用意されています。
用意されている起動スクリプトを、他のデーモンの起動スクリプトが置いてあるディレクトリ(/etc/init.d)にコピーします。
cp /usr/local/src/httpd-2.0.55/build/rpm/httpd.init /etc/init.d/httpd
次に起動スクリプトを編集します。configureで変更したApacheのインストール先などを書き換えます。
vi /etc/init.d/httpd
変更するところとその変更後の値 apachectl=/usr/sbin/apachectl ↓ apachectl=/usr/local/httpd/bin/apachectl httpd=${HTTPD-/usr/sbin/httpd} ↓ httpd=${HTTPD-/usr/local/httpd/bin/httpd} CONFFILE=/etc/httpd/conf/httpd.conf ↓ CONFFILE=/etc/httpd/httpd.conf
書き換えが終了したら、起動スクリプトを使って再起動します。
/etc/init.d/httpd restart
エラーが出たらエラーメッセージをヒントに起動スクリプトを再編集します。
起動スクリプトを有効にするために、以下の2つのコマンドを実行します。
chkconfig --add httpd chkconfig --level 345 httpd on
起動スクリプトが有効かどうか確認します。
chkconfig --list | grep httpd
以下のように表示されればOKです。
httpd 0:オフ 1:オフ 2:オフ 3:オン 4:オン 5:オン 6:オフ