サーバーリテラシ2005 - 第3回 Web サーバーのインストール
This content is not available in your language yet.
Webサーバ
Section titled “Webサーバ”Webサーバとは
Section titled “Webサーバとは”Webサーバとはクライアントから要求を受け取り、インターネットを通じ、HTMLファイルや画像ファイルをクライアントコンピュータに配信するサーバです。
HTMLのような静的コンテンツだけでなく、CGIなど、クライアントから情報を受け取って処理して返すような動的なコンテンツも利用することができます。
Apacheとは
Section titled “Apacheとは”今回、WebサーバにApacheを使用します。Apacheは世界で共同開発されている、フリーのソフトウェアであり、現在世界で最も使われているWebサーバです。
中でも特筆すべき機能はモジュール機能です。様々なモジュールにより機能を追加したり削除したりすることができます。モジュールの追加方法は2つあり、一つははコンパイル時に組み込むモジュールを指定する方法、もう一方はDSO(Dynamic Shared Object)を使った方法です。DSOを使えばコンパイル後でもモジュールを組み込むことが可能となります。
Webサーバの構築
Section titled “Webサーバの構築”インストールの流れは次のようになります。
作業は全て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.55less READMEless INSTALLREADMEにはソフトを使用する上での注意事項や説明が書いてあり、INSTALLにはインストール方法やインストールに必要となるツールが書かれています。
configure
Section titled “configure”次にconfigureを用いて、コンパイルするときのインストールオプションを設定します。
configureの引数に—helpを与えるとそのソフトウェアのconfigureにどのような設定項目があるか見ることができます。
./configure --help今回は説明しやすいように受講者みなさんの環境を統一するので
こちらからオプションを指定します。
オプションの説明
Section titled “オプションの説明”:—prefix=“インストール先”:
インストール先を指定します。
:—enable-layout=“config.layout”:
インストールパスを指定するためのレイアウトを使用します。
レイアウトはconfig.layoutファイルに書いてあります。
レイアウトの詳細もconfig.layoutファイル内にあります。
:—with-mpm=prefork:
preforkというマルチプロセッシングモジュール(MPM)を有効にします。MPMは他にworkerなどがあります。詳しくはhttp://httpd.apache.org/docs-2.0/mpm.htmlを参照してください。
:—enable-modules-shared=all:
全てのモジュールをダイナミックロードできる形(DSO)でコンパイルとインクルードします。このあとに—disable-MODULEとして指定したモジュールは取り除くことができます。allのほかにmostやモジュール名を=の後に置く事ができます。
:—disable-MODULE:
コンパイルされてインストールされるモジュールを取り除きます。
:—enable-so —enable-rule=SHARED_CORE:
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コマンドでコンパイルを行います。
makeinstall
Section titled “install”いよいよインストールを行います。
make installこれで、Apacheのインストールが完了しました。
設定ファイルの変更
Section titled “設定ファイルの変更”次にhttpdの設定を行います。
Apacheの設定ファイルは/usr/local/httpd/conf/以下にhttpd.confというファイルがあります。
設定ファイルを大きく変更する際はバックアップを取りましょう。
今回は最初のファイルのバックアップなのでファイル名.defaultと名づけましょう。
次回からバックアップを取るときはファイル名.bakなどとつけると良いでしょう。
cd /usr/local/httpd/conf/cp httpd.conf httpd.conf.default今回変更するところは以下の設定です。
ユーザとグループの設定
Section titled “ユーザとグループの設定”User nobody↓User httpd
Group #-1↓Group httpdメールアドレスの設定
Section titled “メールアドレスの設定”エラーページにここで設定したメールアドレスが表示されます。
サーバ管理者の連絡先メールアドレスを書きましょう。
ServerAdmin you@example.com↓ServerAdmin m04k00xx@cis.k.hosei.ac.jpサーバネームの設定
Section titled “サーバネームの設定”使用するドメイン名を記入します。
今回はドメインを取得しないので、自分の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設定ファイルの保存
Section titled “設定ファイルの保存”設定ファイルは/etc/以下にまとめて管理されています。
そのため、/etc/httpd/ディレクトリを作成し、その中にhttpdの設定ファイルのシンボリックリンクを置いてあげましょう。
mkdir /etc/httpdln -s /usr/local/httpd/conf/httpd.conf /etc/httpd/httpd.confhttpdを管理するユーザとグループを作成します。
groupadd -g 300 httpduseradd -g httpd -u 300 -c "Apache Daemon User" -M httpdhttpdのログファイルの保存ディレクトリを作成します。
mkdir /var/log/httpdchown 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/)にファイルがあれば、表示させることができます。
HTML動作確認(静的なコンテンツ)
Section titled “HTML動作確認(静的なコンテンツ)”次にWebブラウザでテスト用のページを見てみます。
ドキュメントルートにテスト用のhtmlファイルが置いてあるので見ることができるかチェックしてみましょう。
http://自分のIPアドレス/「あなたの予想に反して、このページが見えているでしょうか?」
というページが見ることが出来ましたか?
表示されない場合は、下のトラブルシューティングを参考に原因を探しましょう。
CGI動作確認(動的なコンテンツ)
Section titled “CGI動作確認(動的なコンテンツ)”htmlだけでなくCGIプログラムもテストしてみましょう。
まず、テスト用のファイルを用意しましょう。
CGIファイルを置く場所はデフォルトの場合、/usr/local/httpd/cgi-bin/です。
vi /usr/local/httpd/cgi-bin/test.cgi:テスト用プログラム:
#!/usr/bin/perlprint "Content-type: text/plain\n\n";print "$_=$ENV{$_}\n" for (keys %ENV);cgiなので実行権限を持たせましょう。
chmod 755 /usr/local/httpd/cgi-bin/test.cgiWebブラウザで作ったファイルを見てみましょう。
http://自分のIPアドレス/cgi-bin/test.cgi下記のように表示されたら、成功です。表示されない場合は、下のトラブルシューティングを参考に原因を探しましょう。
SCRIPT_NAME=/cgi-bin/test.cgiSERVER_NAME=133.25.236.120SERVER_ADMIN=m0xk00xx@cis.k.hosei.ac.jpHTTP_ACCEPT_ENCODING=deflate, gzip, x-gzip, identity, *;q=0HTTP_CONNECTION=Keep-Alive, TEREQUEST_METHOD=GETHTTP_ACCEPT=text/html, application/xml;q=0.9, application/xhtml+xml, image/png, i mage/jpeg, image/gif, image/x-xbitmap, */*;q=0.1SCRIPT_FILENAME=/usr/local/httpd/cgi-bin/test.cgiSERVER_SOFTWARE=Apache/2.0.55 (Unix)HTTP_ACCEPT_CHARSET=shift_jis, utf-8, utf-16, iso-8859-1;q=0.6, *;q=0.1HTTP_TE=deflate, gzip, chunked, identity, trailersQUERY_STRING=REMOTE_PORT=65365HTTP_USER_AGENT=Opera/8.01 (Windows NT 5.1; U; ja)SERVER_PORT=80SERVER_SIGNATURE=<address>Apache/2.0.55 (Unix) Server at 133.25.236.120 Port 80</ address>
HTTP_ACCEPT_LANGUAGE=ja,en;q=0.9REMOTE_ADDR=192.168.10.1SERVER_PROTOCOL=HTTP/1.1PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/binREQUEST_URI=/cgi-bin/test.cgiGATEWAY_INTERFACE=CGI/1.1SERVER_ADDR=192.168.10.20DOCUMENT_ROOT=/usr/local/httpd/htdocsHTTP_HOST=133.25.236.120トラブルシューティング
Section titled “トラブルシューティング”ここではWebページが表示されなかった場合への対処方法を載せています。
ブラウザのメッセージや/var/log/httpd/以下のログメッセージを頼りに問題点を特定しましょう。
ページを表示できません
Section titled “ページを表示できません”ポート開放の設定が間違っているか、httpdが動作していない可能性があります。この場合、httpdにリクエストが届く前にパケットが殺されているので、Apacheのログには残りません。
ページが見つかりせん
Section titled “ページが見つかりせん”404エラーです。アドレスが間違っている、もしくはファイルが存在していない可能性が高いです。
Forbidden
Section titled “Forbidden”許可のないファイルにアクセスしています。この場合、Apacheのerror_log(/var/log/httpd/error_log)にエラーログが残ります。パーミッションがhttpdがアクセスできるようになっているか確認して下さい。
ログを見るには次のコマンドが便利だと思います。
tail -5 /var/log/httpd/access_logtailはファイルの終わりの部分を表示します。今回はオプションで-5を渡しているので終わりの5行を表示します。新しいログはファイルの後ろに追加されるので、tail -5は最新の5つを表示することになります。
エラーログを見る
Section titled “エラーログを見る”以下のエラーログはあくまで一例です。実際には環境等によってエラーメッセージは変わりますし、もしかしたら全く新しいエラーログが出ているかもしれません。そのような場合でもエラーメッセージをよく読み、何がエラーの原因なのか自分で考えるようにしましょう。
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**というエラーメッセージが多くの場合パーミッション設定のミスによって現れるということです。
起動スクリプトの作成
Section titled “起動スクリプトの作成”最後に起動スクリプト(/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 httpdchkconfig --level 345 httpd on起動スクリプトが有効かどうか確認します。
chkconfig --list | grep httpd以下のように表示されればOKです。
httpd 0:オフ 1:オフ 2:オフ 3:オン 4:オン 5:オン 6:オフ