ServersMan@VPSでApacheの設定

Gearbest Gadgets Daily: Up to 95% OFF

目標

とりあえず「ドメインの取得」で書いたように2つドメインをとったので、

  • 2つのドメインでそれぞれWebサイトを構築
  • scratchpad.jpドメインではscratchpad.jp以外にcolinux.scratchpad.jp, debian.scratchpad.jp, books.scratchpad.jpのサブドメインでもWebサイトを構築
    ただし、http://colinux.scratchpad.jp/はhttp://scratchpad.jp/colinux/としてもアクセスできるようにしておく。debianと booksのサブドメインについても一緒。
  • Webサイトのデータは「/www/ドメイン名/サブドメイン名」に置く。
    なので、http://scratchpad.jp/のデータは/www/scratchpad/に、http://colinux.scratchpad.jp/のデータは/www/scratchpad/colinux/に置く。

がこの時点での目標。

一つのApacheで複数のWebサイトを構築するために、Apacheにはバーチャルホストという機能がある。
この昨日を使うと接続してきたホスト名で、表示するページを変えることができます。

全体の設定

/etc/apache/ports.confの設定を確認。下記の2行が記載されていればOK。

NameVirtualHost *:80
Listen 80

個別のWebサイトの設定

Debianでは個別のWebサイトの設定は、/etc/apache2/sites-available/にサイトごとにファイルを作って行います。ファイルはdefaultを参考にしながら作ります。

http://scratchpad.jp/の設定

/etc/apache2/site-available/に下記内容のscratchpadというファイルを作成します。

<VirtualHost *:80>
ServerName      scratchpad.jp
ServerAdmin     webmaster@scratchpad.jp
DocumentRoot    /www/scratchpad

<Directory /www/scratchpad>
Options FollowSymLinks
AllowOverride None
Order allow,deny
allow from all
</Directory>

ScriptAlias /cgi-bin/ /var/www/cgi-bin/
<Directory "/var/www/cgi-bin">
AllowOverride NoneOptions +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>

ErrorLog /var/log/apache2/scratchpad-error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/scratchpad-access.log combined

RewriteEngine On
RewriteLog /var/log/apache2/scratchpad-rewrite.log
RewriteLogLevel 0
RewriteRule ^/colinux/(.*) http://colinux.scratchpad.jp/$1 [L]
RewriteRule ^/debian/(.*) http://debian.scratchpad.jp/$1 [L]
RewriteRule ^/books/(.*) http://books.scratchpad.jp/$1 [L]
</VirtualHost>

2行目のServerNameで、この設定がscratchpad.jpというホスト名でアクセスされた場合に適用されることを指定。

4行目のDocumentRootで、この設定で/www/scratchpad以下のファイルをコンテンツとして取り扱うことを指定。6~11行目はdefaultからのパクリ。

13~19行目はCGIの設定。これもdefaultからのパクリ。

20~25行目はログの設定。ファイル名を変更してscratchpad.jp関係のログが別ファイルになるように指定。

27~32行目はURLの書き換え(リダイレクト)の設定。まず27行目で書き換え機能をONにしたあと、30行目から32行目で書き換えルールを指定。
30行目はhttp://scratchpad.jp/colinux/・・・でアクセスされた場合に、http://colinux.scratchpad.jp/・・・に書き換え。
31行目はhttp://scratchpad.jp/debian/・・・でアクセスされた場合に、http://debian.scratchpad.jp/・・・に書き換え。
32行目はhttp://scratchpad.jp/books/・・・でアクセスされた場合に、http://books.scratchpad.jp/に書き換え。

http://colinux.scratchpad.jp/の設定

/etc/apache2/site-available/に下記内容のscratchpad-colinuxというファイルを作成します。

<VirtualHost *:80>
ServerName      colinux.scratchpad.jp
ServerAdmin     webmaster@scratchpad.jp
DocumentRoot    /www/scratchpad/colinux

<Directory /www/scratchpad/colinux>
Options FollowSymLinks
AllowOverride None
Order allow,deny
allow from all
</Directory>

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

ErrorLog /var/log/apache2/scratchpad-error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/scratchpad-access.log combined
</VirtualHost>

これは書き換えルールとかはなく、ServerNameとDocumentRootの設定ぐらいで、シンプルになります。

http://debian.scratchpad.jp/の設定

/etc/apache2/site-available/に下記内容のscratchpad-debianというファイルを作成します。

<VirtualHost *:80>
ServerName      debian.scratchpad.jp
ServerAdmin     webmaster@scratchpad.jp
DocumentRoot    /www/scratchpad/debian

<Directory /www/scratchpad/debian>
Options FollowSymLinks
AllowOverride None
Order allow,deny
allow from all
</Directory>

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

ErrorLog /var/log/apache2/scratchpad-error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/scratchpad-access.log combined
</VirtualHost>

http://books.scratchpad.jp/の設定

/etc/apache2/site-available/に下記内容のscratchpad-booksというファイルを作成します。

<VirtualHost *:80>
ServerName      books.scratchpad.jp
ServerAdmin     webmaster@scratchpad.jp
DocumentRoot    /www/scratchpad/books

<Directory /www/scratchpad/books>
Options FollowSymLinks
AllowOverride None
Order allow,deny
allow from all
</Directory>

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

ErrorLog /var/log/apache2/scratchpad-error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/scratchpad-access.log combined
</VirtualHost>

もう一つのドメイン用の設定

ドメイン名をexample.comとすると、/etc/apache2/site-available/に下記内容のexampleというファイルを作成します。

<VirtualHost *:80>
ServerName      example.com
ServerAdmin     webmaster@example.com
DocumentRoot    /www/example

<Directory /www/example>
Options FollowSymLinks
AllowOverride None
Order allow,deny
allow from all
</Directory>

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

ErrorLog /var/log/apache2/example-error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/example-access.log combined
</VirtualHost>

設定の有効化

debianではa2ensiteというコマンドで、/etc/apache2/sites-availableにある設定を有効にします。今回は、scratchpad, scratchpad-colinux, scratchpad-debian, scratchpad-books, exampleを作成したので、これらの引数にしてa2ensiteを実行します。

sudo /usr/sbin/a2ensite scratchpad scratchpad-colinux scratchpad-debian scratchpad-books example

デフォルトの設定の無効化

デフォルトで/etc/apache2/sites-availableのdefaultという設定が有効になっているので無効化しておきます。

sudo /usr/sbin/a2dissite default

設定の確認

a2ensiteコマンドやa2dissiteコマンドでは/etc/apache2/sites-enabled以下にシンボリックリンクを作成したり削除したりします。このディレクトリ以下にある設定が、apacheの起動時に読み込まれる仕組みです。

ls /etc/apache2/sites-enabled
example        scratchpad-books     scratchpad-debian
scratchpad   scratchpad-colinux

設定の読み込み

OSを再起動せずにApacheに設定ファイルを読み込ませるには以下の機能を設定します。

sudo /etc/init.d/apache2 reload

所有権の設定

Apacheはwww-dataというグループに属しているwww-dataというユーザ権限で動作します。
そこで/www以下のグループ所有権をwww-dataにし、www-dataグループに所属するユーザが書き換え可能にしておきます。また、作られたファイルにグループ所有権が継承されるようにsetgidビットを立てておきます。

sudo chgrp -R www-data /www
sudo chmod -R g+ws /www

また、Webサイトをメンテナンスを担当するユーザをfooとするとそのユーザをwww-dataグループに所属させるとよいでしょう。

sudo adduser foo www-data

まとめ

以上で、サーバの設定はおしまいです。次回からはこのApacheと組み合わせるWordPressを設定します。