CentOS6.2 on VirtualBoxでWebサーバーを構築

前回までで、VirtualBox上にゲストOSをインストールし、
ホストOS→ゲストOSへのSSH接続および、ゲストOSのインターネット接続ができました。
今回はゲストOS上にWebサーバー(apache)を立ててホストOSからアクセスしてみます。

前回:Lion + VirtualBox + CentOSでSSH接続 - sat0yuの日記

Apacheのインストール

インストール自体は簡単です。
前回でゲストOSのインターネット接続もできましたので、
今回は素直にyumコマンドでインストールします。

yum -y install httpd
インストールするのはhttpdパッケージです。
httpdとはhttp-deamonの略で、Unixに常駐するWebサーバー(∋ apache)を指します。

インストールが終わったら以下のコマンドできちんと動作するか確認しましょう

/etc/init.d/httpd start

Apacheを常駐サービスに登録

Unixにおいては通常のユーザーとは別に、バックグラウンドでdeamon(デーモン)が働いています。
apacheやsshd、iptableなどもデーモンとして動作しているのです。

CentOSをはじめとするRed HatLinuxではchkconfigコマンドでそれらデーモンを管理できます。
各サービスの常駐に関する設定は/etc/init.d/以下に、それぞれシェルスクリプトとして記述されています。
yumコマンドでインストールしたのであれば、プログラム側でスクリプトファイルを用意してくれるので
以下のコマンドを打つだけで常駐プログラムとして登録できます

chkconfig --add httpd
chkconfig httpd on

Apacheの設定/ユーザー公開ディレクトリ

インストール後、cgiやphpなどと絡めたりしながらApache側では
/etc/httpd/conf/httpd.confで設定をしていきます。
今回はユーザーディレクトリの設定だけ述べておきます。

#vi /etc/httpd/conf/httpd.conf
~
(略)
~

#
# 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 ←コメントアウトを解除して、ユーザーディレクトリの名前を指定します(デフォルトはpublic_html)

AliasMatch ^/userdir/([^/]+)/(.*) /home/$1/public_html/$2http://localhost/userdir/ユーザー名/でアクセスできるようにする

ユーザーディレクトリのパーミッション設定

Apache側の設定を変えただけではユーザディレクトリにアクセスできません(そのままだとたぶん無理。)

まずはユーザー(以下admin)のホームに先ほど指定した公開ディレクトリを作成します

%mkdir ~/public_html
chmod 755 public_html

では”なぜ”パーミッションを所有者(7)、グループ(5)、その他(5)に設定する必要があるのでしょうか。

それは、apacheが擬似ユーザーとして各ユーザーディレクトリにあるファイルを読み込んでいる(実行している)からです。

これ、けっこう重要で、これが理解できればもうパーミッションまわりで迷うことはないでしょう。
ちなみに擬似ユーザーなので、仮にapacheでログインしようとしてもエラーで返されてしまいます。

SELinuxの無効化

CentOS6.2には標準でセキュリティプログラムSELinuxが有効になっています。
このプログラムは主に各ファイルと、それらに対する各ユーザーのアクセス権の制御をおこなっています。

もちろん外部公開のサーバーでは有効にして、設定も細かく行う必要がありますが、
今回は開発環境なので無効化してしまいましょう。

これが有効のままだとブラウザからアクセスしてもパーミッションエラーが返ってきます
パーミッションの設定を間違えたのかと勘違いしやすいので、注意してください

#vi /etc/selinux/config
以下の行を見つけて修正してください
SELINUX=disabled
サーバーの再起動後、SELinuxが無効化されていると思います

ディレクトリインデックスの設定

現状ですでにユーザーディレクトリのhtmlファイルにはアクセスできると思います。
http://localhost/userdir/<ユーザー名>/index.htm
などでアクセスできるか確認してみてください。

それでは以下の、
http://localhost/userdir/<ユーザー名>/
ではどうでしょう?

おそらくエラーで出たと思います。
これはapache側の設定でディレクトリ名でアクセスした再に、
ディレクトリ内に存在するindex.htmやindex.cgiを自動的に探す設定をしていないからです。

再びhttpd.confを編集します

# vi /etc/httpd/conf/httpd.conf
~
(略)
~
#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#

DirectoryIndex index.htm index.html index.cgi ←スペースで区切って追加します

さて以上で、とりあえずにはなりますがapacheを使ったwebサーバーが構築できました。
今後もapacheを主体にして、PHPpython,rubyでサーバーサイドプログラミングするのであれば
cgiの設定なども行う必要がありますし、もちろんセキュリティもより堅牢なものにしなければなりません。

apacheに関して書いておきながら、実は次回はnginxを導入したいと思っています。
ゆくゆくはnginxで静的ファイルを捌きつつ、node.jsで開発しようと企み中。