VPSサーバにApacheをセットアップ
2008-10-07
少し時間ができたので、こないだ借りた CPI の VPS サーバに Apache をセットアップした。 Apache はデフォルトで起動しているけど、このままでは1つのドメインしか収容できない。 まずは、複数のドメインで使い分けることができるようにする。
バージョン管理用に Mercurial をインストール
設定ファイルを楽にバージョン管理したいので、 fedoraのサイトから Mercurial のバイナリをダウンロードしてインストールした。
$ sudo rpm -i mercurial-0.9.1-1.fc5.i386.rpm
Apache の設定ファイルディレクトリに移動して、Mercurialの管理下へ置く。
$ cd /etc/httpd/conf
$ sudo hg init
$ sudo hg addremove
$ sudo hg commit
設定ファイルをスリムに
初期状態の Apache はたくさんのモジュールが入っている。 このまま使ってもいいんだけど、フロントの Web サーバはなるべくシンプルにしたいので設定ファイルを削る。 もちろん、これだとCGIもPHPも動かない。 PHPは別のポートでサーバを起動して、そっちにプロキシする予定。
ServerTokens OS
ServerRoot "/etc/httpd"
PidFile run/httpd.pid
Timeout 120
KeepAlive Off
<IfModule prefork.c>
StartServers 1
MinSpareServers 1
MaxSpareServers 5
ServerLimit 10
MaxClients 10
MaxRequestsPerChild 4000
</IfModule>
Listen 80
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule mime_module modules/mod_mime.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
User apache
Group apache
ServerAdmin root@localhost
ServerName example.com:80
UseCanonicalName Off
DocumentRoot "/var/www/html"
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
DirectoryIndex index.html
TypesConfig /etc/mime.types
DefaultType text/plain
<IfModule mod_mime_magic.c>
MIMEMagicFile conf/magic
</IfModule>
HostnameLookups Off
ErrorLog logs/error_log
LogLevel warn
LogFormat "%h %l %u %t ¥"%r¥" %>s %b ¥"%{Referer}i¥" ¥"%{User-Agent}i¥"" combined
CustomLog logs/access_log combined
ServerSignature On
設定ファイルをチェックして Apache を再起動。
$ /etc/init.d/httpd configtest
$ /etc/init.d/httpd restart
top コマンドでみたところ、1プロセスあたりのメモリ消費量がだいたい1MBくらい。
圧縮設定
帯域を節約するために HTML を圧縮してクライアントに送信する設定。
LoadModule deflate_module modules/mod_deflate.so
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml
</IfModule>
バーチャルホストとディレクトリを関連づけ
複数ドメインで運用する時に、ドメインとディレクトリを関連づけたい。 たとえば www.machu.jp にアクセスされると /var/www/www.machu.jp のコンテンツを表示し、 example.com だと /var/www/example.com のコンテンツを表示するように。 そのために mod_vhost_alias を使う。 もしかしたら UseCanonicalName Off と併用した方がいいかも。
LoadModule vhost_alias_module modules/mod_vhost_alias.so
# DocumentRoot "/var/www/html"
VirtualDocumentRoot "/var/www/%0"
他の HTTP サーバにプロキシする
Rails を Mongrel で動作させる場合などには、 Apache を他の HTTP サーバへのプロキシとして使う。 まずは mod_proxy を読み込む。ロードバランサである mod_proxy_balancer はあとで。
LoadModule proxy_module modules/mod_proxy.so
# LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so
# LoadModule proxy_connect_module modules/mod_proxy_connect.so
ここでは wolfbbs.jp ドメインへのアクセスを8000ポートへ転送するように設定した。 前述のように、PHPを組み込んだApacheをあとで用意する予定。
NameVirtualHost *:80
<VirtualHost *:80>
ServerName wolfbbs.jp
<IfModule mod_proxy.c>
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8000/
ProxyPassReverse / http://127.0.0.1:8000/
</IfModule>
</VirtualHost>
<VirtualHost *:80>
ServerName example.com
</VirtualHost>
これで土台はできたかな。