text

Webサーバーの構築

Apacheの設定と活用


1.Webサーバーとは − Apacheが使われる理由

Webページの表示のためにはサーバーOS上でHTTPというプロトコルを処理するためのWebサーバーアプリが必要不可欠である。
Webサーバーソフトで有名なものとしてはフリーウェアのApache、Microsoft社のIIS、Netscape社のiPlanetなどがある。

現在、WebサーバーソフトのデファクトスタンダードとなっているのはApacheだ。上記でも述べたとおり、WebサーバーソフトはApacheだけではない。本校の実習環境で使用しているサーバーOSはFedraCore4.0であり、デフォルトでApache(Ver.2.0)がインストールされている。また、多くのUNIX及びUNIXクローンOSではWebサーバーにApacheが採用されている。なぜ、WebサーバーとしてApacheを利用しているのだろうか?

Webサーバーに求められることは、Webサイトを素早く構築し、低いコストで維持することが最も重要な課題とされていることだ。

2.Webサーバーの構築の目的

Linux + Apacheというシステム構成はWebアプリケーションサーバーを構築する際の基礎となる。
CGIの実行許可やアクセス制限などを習得する。

3.サーバー構築の手順

(1)Apacheの基本設定

 [設定ファイル]
 /etc/httpd/conf/httpd.conf  の編集。

 ※  作業前には初期の設定ファイルのバックアップを取っておくこと。

# cp -p httpd.conf httpd.conf.20060708


 ・DocumentRootの設定
 ・UserDir(ユーザーhtmlホーム)の設定
 ・tcp 80ポートの開放

(2)サービスの起動と停止
 起動スクリプトの利用

(3)Webページの公開

(4)CGIの実行許可
 (手順)
 ・CGI設置ディレクトリの作成
 ・ユーザーによるCGI実行制限

(5)アクセス制限
 ディレクトリの制限
 .htaccessの使用

4.Apacheの基本設定

■はじめに

Apacheに限らず、多くのサーバーアプリは稼動する汎用性を持たせるためにプログラム本体とサーバーアプリの設定情報を記述した『設定ファイル』からなる。このように分けておくことでサーバー環境の移行やバージョンアップなどによる大規模な変更があったとしても以前の設定情報がそのまま流用できる。また、同じ設定で新たにWebサーバーを設置する際にも同様の利点がある。
サーバーマシンやOSのリプレースの際にその都度イチイチ設定を手入力で行っていたら1台や2台ならともかく、それ以上ともなれば大変だ。管理者の負担は増える。移行前と同じ設定でも手入力などしていたら、タイプミスをやりかねない。

NW障害やサーバー接続の障害が発生した折に、最初に確認するのが設定ファイルだ。
明らかに設定ファイルにミスタイプしていなくても設定ファイルの記述ミスというのは起こり得る。そんな設定ファイルでも、サーバー稼動直後は問題なく動いているので最初は問題がないのかもしれない。ただし、何日、何ヶ月か経過してある日突然、サーバー障害が発生したときに記述ミスに気がつく、ということは往々にしてある。

■httpd.confの編集

Apache Ver.2.0の設定ファイルはhttpd.confの1つにまとめられている。また、Webサーバーに特別なことなことをさせないのならば初期設定から変更することは少ない。

まずは、カレントユーザーをrootに変更し、設定ファイルの置いてあるディレクトリに移動する。

# cd /etc/httpd/conf

UNIX及びそのクローンOSのディレクトリ構成でetc/というディレクトリが存在する。
これは、その名のとおり『その他のディレクトリ』だ。etc/ディレクトリを設置した当初はどのカテゴリにも入らないファイルをテキトーに放り込んでいた苦肉の策、という感があった。しかし、近年ではサーバーの設定ファイルの専用の置き場へと考え方が替わってきた。etc/ディレクトリ以外にもあるが、基本的にサーバーの設定ファイルといったらetc/ディレクトリに収められている、と考えて差し支えはない。

(ex)オリジナルの内容をファイル名の末尾に作業日の日付をつけて保存する。

# cp -p httpd.conf httpd.conf.20060708
# vi httpd.conf

設定ファイルの先頭が、#から始まる行はコメントアウト行で設定には影響しない。 Apacheの基本的な設定項目は、ほとんどがデフォルトの設定値のままでも動作する。基本的な部分を踏まえ必要部分を変更していくようにすること。

httpd.confの設定は基本的に以下の3つのセクションに分けている。

####Section1:Global Environment
-> 全体設定 ディレクティブによる設定

####Section2:'Main' server configuration
-> メインサーバーの設定。タブ形式のコンテナによる設定
####Section3:Virtual Hostst
-> バーチャルホストの設定
# The configuration directives are grouped into three basic sections:
# 1. Directives that control the operation of the Apache server process as a
# whole (the 'global environment').
# 2. Directives that define the parameters of the 'main' or 'default' server,
# which responds to requests that aren't handled by a virtual host.
# These directives also provide default values for the settings
# of all virtual hosts.
# 3. Settings for virtual hosts, which allow Web requests to be sent to
# different IP addresses or hostnames and have them handled by the
# same Apache server process.

■サーバールートの設定

Apacheの設定ファイルのルートとなるディレクトリを設定

ServerRoot "/etc/httpd"

■Listenポートの設定

Listen 80

と記述されている行は、ApacheがTCPポートの80番を使用することを意味している。
通常の公開WebサーバーはTCPポートの80番が標準となっている。 通常、

http://172.18.140.1/

にBrowserなどでアクセスした場合、以下のようにポート番号を指定した場合と同じ意味。

http://172.18.140.1:80

上記のListenで80番以外のポート(xx)を指定していれば、上記のように:xx(xxは任意の数字)とhttpでサーバーにアクセスするポート番号を明示的に指定すれば可能となる。
(ex)
http://172.18.140.1:8080

■管理者のメールアドレスの設定

Apacheが稼動しているLinuxサーバーの管理者ではなく、Apacheの管理者とする。
そのため、携帯のメールであろうが、Webメールであろうが、かまわない。

 基本設定ではワザワザ管理者のメールアドレスを設定する必要はない。
 もし、指定する場合は下記の太字部分のように変更するとよい。

ServerAdmin root@localhost

 -> ServerAdmin your-mailadress@mercury.sentan-college.ac.jp

※ Webサーバーの管理者のメールアドレスを書きましょう。

■サーバー名の設定

Webサーバーに名称を定義する。
サーバー名を有効にするためには、DNSへの登録を反映させる必要がある。

#ServerName new.host.name:80

 -> ServerName eaa00140.dmz.sentan-college.ac.jp:80

■トップページのファイル名

これはブラウザからサイト名だけ指定されたとき、無条件で表示されるトップページのHTMLファイル名。通常は、index.htmlだけに設定するが、必要な場合はindex.shtml、index.cgi、index.php、index.jsp、index.swfなど必要なものを追加しておく。

ときどき、index.htmとファイル名末尾が.htmになっているものを見かけるが、これはMicrosoft社製のHTMLエディタに準拠したものと見受けられる。WindowsOSは拡張子を3文字で識別するために起こる事象。ユーザーが混乱しないように、出来るだけ拡張子はそろえた方がよい。

DirectoryIndex index.html

変更する場合は・・・

DirectoryIndex index.html index.shtml index.cgi index.php index.jsp index.swf

と記述する。

■ドキュメントルート

index.htmlをはじめとした、そのサイトのWebコンテンツを収めたディレクトリの指定を行う。
本校の実習環境(FedraCore 4.0)では

DocumentRoot "/var/www/html"

となっており、
http://172.18.140.1/

http://172.18.140.1/index.html


上記のDocumentRootの""の中を書き換えれば、ドキュメントルートは変更できる。
Webサーバーを立ててコンテンツを見せるだけならば、変更する必要はない。

■UserDir(ユーザーhtmlホーム)の設定

<IfModule mod_userdir.c>
#
# UserDir is disabled by default since it can confirm the presence
# of a username on the system (depending on home directory
# permissions).
#
UserDir disable
#
# To enable requests to /~user/ to serve the user's public_html
# directory, remove the "UserDir disable" line above, and uncomment
# the following line instead:
#
#UserDir public_html
</IfModule>
以下のように、UserDir disableをコメント表記にし、UserDir public_htmlのコメント表記をはずす。
<IfModule mod_userdir.c>
#
# UserDir is disabled by default since it can confirm the presence
# of a username on the system (depending on home directory
# permissions).
#
#UserDir disable
#
# To enable requests to /~user/ to serve the user's public_html
# directory, remove the "UserDir disable" line above, and uncomment
# the following line instead:
#
UserDir public_html
</IfModule>

■Webサーバーのアクセスログ

Webサーバーのアクセスログファイルの指定。
FedraCore4.0の初期設定の設定のままでログ取得はされる。
ログファイルの設置場所やファイル名を任意に変更したい場合のみ変更する。

ErrorLog logs/error_log

CustomLog logs/access_log

と、ログファイルの指定がなされているので、ログファイルはそれぞれ、

/etc/httpd/logs/access_log

/etc/httpd/logs/error_log

に格納される。

■文字コードの設定

Webページの閲覧時にサーバー側とクライアント側の文字コード環境の違いが現れることがある。
FedoraCore4.0では初期状態でUTFコードが設定されている。 シェアの多いブラウザソフトでバージョンの新しいものならば、ブラウザ側でエンコードして違いを吸収できるが、マイナーなものや開発途上にあるものの場合はその限りではない。よって、サーバー側で予め対処(=コメントアウト)しておくことが好ましい。

AddDefaultCharacters UTF-8

 -> #AddDefaultCharacters UTF-8

■ポートの開放

標準ではファイアウォールのTCP 80番ポートは閉じられているので開放する。

# vi /etc/sysconfig/iptables


既にSSHのポート(tcp 22)が開放する記述があるので、この行をコピーして22 -> 80に書き換える。

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

iptablesの設定を変更したら必ず、以下のコマンドをたたいて反映させる。

# service iptables restart

5.Apacheの起動・停止・再起動

■デーモンの起動と再起動

ここまでで、Web表示をさせるためのApacheの設定は完了した。あとは、デーモン(=httpd)を起動するのみ。
httpd.confの内容を変更しただけでは、Apacheの動作に変化はない。必ず、httpdの起動または再起動をする必要がある。

現在のデーモンの状態を確認

service httpd status

デーモンの起動/停止/再起動

# service httpd start

# service httpd stop

# service httpd restart

デーモンの初期起動設定

このままの状態では、サーバー起動後httpdは自動起動する設定にはなっていない。サーバー起動/再起動時にそのつどコマンドを入力しなければならない。そこで、OS起動後にhttpdが自動起動するように設定する必要がある。

#chkconfig --list httpd

すると、以下のようにコマンドの実行結果が返ってくる。

httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off

これはOS起動時にデーモンは起動しないランレベルに設定されていることを示す。そこで、下記のコマンドを実行する。

#chkconfig httpd on


設定を確認する。

#chkconfig --list httpd

すると、以下のようにコマンドの実行結果が返ってくる。

httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

6.Webページの公開

■webサイトのトップページ

httpd.confで設定したドキュメントルートのディレクトリ(/var/www/html/)にindex.htmlファイルを作成して表示されることを確認する。

■ユーザディレクトリの設定

httpd.confにて、ユーザーディレクトリの公開の設定をしている。
ココでは、ユーザーディレクトリの作成 -> 公開を行う。

$cd ~ <- ユーザーのホームディレクトリ(/home/eaa00140)に移動

$ mkdir public_html <-http://172.18.140.1/~eaa00140/-)を作成

$vi public_html/index.html 


紙面ではユーザー名をeaa00140としましたが、ご自身の環境にあったものをお使いください。

■パーミションの設定

RedHatからFedoraCoreへと変わり、公開用ディレクトリpublic_htmlには公開できるパーミションが設定されているが、一般的なUNIX及びクローンOSでは公開用ディレクトリやファイルのパーミッション設定が必要となる。
FedraCoreでは、ユーザーディレクトリは755、公開ディレクトリは775のパーミッションが初期状態で与えられている。

ディレクトリやファイルのパーミション設定及び確認

$ls -l ~ <- ホームディレクトリのパーミッションの確認

$ls -l public_html 
<- 公開ディレクトリのパーミッションの確認


Webサーバーとして交換することを前提とするならば、ユーザーのホームディレクトリは711、公開用ディレクトリは755のパーミッションに設定しておかなくてはならない。

$chmod 711 ~ 
<- ホームディレクトリのパーミッション711の設定

$chmod 755 public_html 
<- 公開ディレクトリののパーミッション755の設定

パーミッションは000〜777までの8進数で表現する。
パーミッションの数字の100の位、10の位、1の位にはそれぞれ意味がある。
100の位・・・ファイルやディレクトリ所有者の読み/書き/実行の権限を意味する。
10の位・・・ファイルやディレクトリ所有者グループの読み/書き/実行の権限を意味する。
10の位・・・その他のユーザーの読み/書き/実行の権限を意味する。

各位の数字にもそれぞれ意味がある。

4・・・ファイルやディレクトリの読み込み権限を与える。
2・・・ファイルやディレクトリの書き込み権限を意味する。
1・・・ファイルやディレクトリの実行権限を意味する。

これらの数字を各位ごとに足して0〜7で権限を設定する。
例 : 755 = 400+200+100 + 40+10 + 4+1 -> ファイルの所有者は読み/書き/実行の権限を持つ。ファイル及びディレクトリに対して所有者グループのユーザーは読み/実行の権限を持つ。それ以外のユーザーは読み/実行の権限を持つ。

■ファイルの所有者の変更

他のユーザーが作ったファイルやディレクトリを譲り受けた際にパーミッションの変更が必要になることがある。
作業はroot権限で実施できる。

#chmod ownner:group file

近年では、管理者用ツールがPerl/CGI形式で配布される用になってきたこともあり、サーバー管理に使用するようになってきた。
ただし、サーバー側で実行されるため、セキュリティ面への配慮は重要である。

■ドキュメントルートのCGI

単に、公開用ディレクトリにcgiスクリプト記述したファイル(.cgi)を設置しただけでは、apacheはCGIプログラムを実行できない。
CGIを実行するためには

 ・apacheの設定ファイル(httpd.conf)の変更
 ・***.cgiファイルへの実行権限設定

の2点が必要。

■httpd.confの変更

#AddHandler cgi-script .cgi

 -> AddHandler cgi-script .cgi

<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

の記述を

<Directory "/var/www/cgi-bin">
Options FollowSymLinks ExecCGI
AllowOverride None
</Directory>

と書き換える。

CGIの実行にはcgi-binの設定ディレクトリにExecCGIを加える必要がある。ちなみに、FollowSymLinksとはシンボリックリンクからのアクセスも許可する、ということ。

(CGIスクリプトの作成例)

#vi /var/www/cgi-bin/sample.cgi

#!/usr/bin/perl
print "Content-type: text/plain \n\n";
print "Hello, CGI!";

■CGIスクリプトに実行権限を与える

# chmod o+x sample.cgi

# service httpd restart

http://172.18.140.1/cgi-bin/sample.cgi にアクセス。

ブラウザにCGIスクリプトの実行結果が表示されればOK!

■ユーザー単位のCGIスクリプトの実行

ユーザーの公開用ディレクトリ下でCGIスクリプトを実行したい場合は以下のように設定をする。

$ cd public_html
$ mkdir cgi-bin


CGIディレクトリ名は何でもよいのだが、慣習的にCGIスクリプトの設置ディレクトリをcgi-binとするようにしている。
/public_html/cgi-bin/下にcgiスクリプトを設置してhttpd.confの中に設定を書き込んだ後にCGIスクリプトファイルに実行権限を与えればユーザー単位のCGI実行が出来る。

httpd.confの変更

ユーザー単位CGI実行のためにhttpd.confに以下の記述を新たに追加する。

<Directory /home/eaa00140/public_html/cgi-bin>
AllowOverride All
AddHandler cgi-script .cgi
</Directory>

FedraCoreのマニュアルでは"<Directory /home/*/public_html/cgi-bin>"と記述すればよい、というように書かれているが、FedraCore4.0ではApache2.0のバグかOSのバグのどちらかのために*ではユーザー単位のCGIは実行できない。
ユーザー単位CGI実行が必要なユーザー分ワザワザ上記のようにコードブロックを書かなければならない。
"AddHandler cgi-script .cgi"の記述では"cgi-script"と".cgi"の間に半角スペースを入れなければ記述ミスとみなされる。念のため半角スペースを2つ入れおくとよい。
ただし、全角スペースを入れると場合も記述ミスとシステム上みなされるので注意が必要。

suExec機能の無効化

最近のUNIX及びクローンOSではセキュリティへの配慮のためかユーザーの公開ディレクトリ以下でのCGIスクリプトを実行できないようにsuExec機能による実行制限が掛けられている。
多くのプロバイダでは、ユーザー単位のCGIスクリプトが実行できないようにしてあるが、suExec機能によるものだと容易に想像が出来る。
下記でSuExec機能の無効化の方法を示す。

#cd /usr/sbin/
#mv suexec suexec.old
$chmod o+x test.cgi


mv suexec suexec.oldではSuExecではSuExecコマンドの名称変更して機能を無効化する。

.htaccessの設置

.htaccesファイルをcgi-binディレクトリ(/home/eaa00140/public_html/cgi-bin/)に設置する。

$ vi ~/public_html/cgi-bin/.htaccess

(.htaccessファイルの作成例)

Options ExecCGI
AddType application/x-httpd-cgi .cgi

$ service httpd restart

http://172.18.140.1/~eaa00140/cgi-bin/test.cgiにアクセス。

ブラウザにCGIスクリプトの実行結果が表示されればOK!