Ubuntu Apache2のインストールと設定

Ubuntu/debianでのApache2の設定です。インターネットに繋がっていて、DNSなどでドメインの設定をして、FWとかルーターとかの80/tcpポートが開いていることが前提になります。いろいろやっていると設定が面倒になりますが、デフォルトの段階では案外楽勝です。
ここでは、

  • IP: 123.456.789.xxx
  • Domain: example.com

を前提にして解説します。

インストール

好みはいろいろですが、私は基本的にrootになって作業してしまうのでsudoはあんまり使いません。サーバー設定する際はrootが一番いいです。
インストールは以下のコマンドのみです。
# apt-get -y install apache2
インストールが終了したら、http://123.456.789.xxx/または、http://example.com/にアクセスします。「It's work!」と表示されたら成功です。
itswork
インストール後にうまくアクセスできない場合は、こちらを確認してみてください。
うまくアクセスできた場合は、すべてデフォルトの設定でのアクセスになるので、/var/www/がDocumentRootになっています。

各ユーザーアカウントでWEBサーバーを使えるようにする

/home/userなどの各ユーザーアカウントでWEBサーバーが使えるように設定します。デフォルトでは/var/wwwのROOTユーザーのみWEBサーバーを公開できるようになっています。
# cd /etc/apache2/mods-available
# ll (あるいは、ls -alとか。)

-rw-r--r-- 1 root root 64 2012-11-07 05:40 suexec.load
-rw-r--r-- 1 root root 70 2012-11-07 05:40 unique_id.load
-rw-r--r-- 1 root root 604 2012-11-07 05:40 <em>userdir.conf</em>
-rw-r--r-- 1 root root 66 2012-11-07 05:40 userdir.load
-rw-r--r-- 1 root root 70 2012-11-07 05:40 usertrack.load

でもって、利用できるモジュールの一覧を表示させます。その中にuserdir.confなるファイルがあるのでそれをviなどで開きます。
修正箇所は、
Optionsの項目で、Perlを使えるように+ExecCGIを加えます。自分のサーバーで自由に設定できる場合は、Options Allでも構わないと思います。
DirectoryIndexでは、/でアクセスした際のindexファイルの拡張子を指定します。例にあるぐらい設定しておけば十分です。
AddHandlerでは、.cgiの設定をします。.cgiと.plを指定すれば十分だと思います。rubyとか使う人もいるかもですが、それらの設定はそれぞれで。
好みにもよりますが、公開ディレクトリ名は、私の場合はwwwにしてしまう場合が多いです。デフォルトのpublic_htmlのままでも構いません。その場合はユーザーアカウント以下ではpublic_htmlというディレクトリを作成します。
<IfModule mod_userdir.c>
UserDir www
UserDir disabled root

<Directory /home/*/www>
AllowOverride FileInfo AuthConfig Limit Indexes
#Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Options FollowSymlinks MultiViews Indexes +ExecCGI
DirectoryIndex index.html index.cgi index.pl index.php
AddHandler cgi-script .cgi .pl
AllowOverride All
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
</IfModule>

ユーザーのWEBサーバーの設定をすると、http://example.com/~username/でアクセスできるようになるわけですが、このチルダが嫌だというのがよくある話でして、それを正規表現で書き換えるとhttp://example.com/username/という感じでチルダなしでアクセスが可能です。ここらはお好みで。
AliasMatch ^/([^/]+)(.*) /home/$1/www/$2
をuserdir.conf内の下にでも付け足してください。
設定を保存したら、/etc/init.d/apache2 restartを忘れずに。

/etc/skel/でユーザーを作成した際のデフォルトのディレクトリを作成する

Linuxはユーザーを作成した際にデフォルトのユーザーディレクトリを作成するためのコピー元をもっています。それが/etc/skel/以下になります。/etc/skel/に移動して必要なディレクトリやファイルを作成します。ここでは自由に任意のファイルを作成できます。私はSSHで接続することが多いので、.sshディレクトリも作成しています。
# cd /etc/skel/
# mkdir -m 755 www (*1)DocumentRootを作成
# touch www/index.html
# vi www/index.html (*2)内容を編集して初期アクセスのファイルを作成
# mkdir -m 755 .ssh
# ll
drwxr-xr-x 4 root root 4096 2013-03-03 03:39 .
drwxr-xr-x 129 root root 12288 2013-03-01 07:59 ..
-rw-r--r-- 1 root root 220 2010-04-19 10:51 .bash_logout
-rw-r--r-- 1 root root 3103 2010-04-19 10:51 .bashrc
-rw-r--r-- 1 root root 675 2010-04-19 10:51 .profile
drwxr-xr-x 2 root root 4096 2013-02-28 01:34 .ssh
drwxr-xr-x 2 root root 4096 2013-03-03 03:40 www

こんな感じだったらよいのではないでしょうか。

新規でユーザーを作成

この新規で作成するユーザーをこのWEBサーバーのDocumentRootにしようと思います。Ubuntuではすべての公開ディレクトリがヴァーチャルホスト風になっているので特にメインのDoumentRootなるものが存在するんだかしないんだかというところですが、代表ドメイン(example.com)をこのユーザーに当ててゆこうということです。
以下のコマンドで新規ユーザーを作成します。
# adduser username
途中でいろいろ訊かれるのですが、全部空で大丈夫です。(逆に何か入力してもいいです。)
最後にパスワードの設定を要求されるので、所定のパスワードを設定します。ユーザーの追加が成功すると/home/usernameで新しくディレクトリが作成されています。
この時点で、先程/etc/skel/で設定した内容がコピーされているので、WEBサーバーにアクセスできます。
http://123.456.789.xxx/~username/
にアクセスしてみてください。(*2)で設定したindex.htmlが表示されるはずです。