at posts/single.html

VPSサーバにApacheをセットアップ

少し時間ができたので、こないだ借りた 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>

これで土台はできたかな。