目次

apacheでのバーチャルホストについて考える

RPMでインストールした場合と仮定する。

考慮する点

  1. apacheのバーチャルホストはWebクライアントからのHTTP要求に対しどのホストへの接続であるかをHTTPパケットから探し出す。
  2. 探し出したFQDN名を元にバーチャルホスト設定内容を検査し、該当するWebホストで接続要求を渡す。
  3. しかし、SSL通信の場合このHTTP要求自体が暗号化されており復号化するためには適切な秘密鍵が必要となる。この秘密鍵を所有しているWebホストに接続するための手段としてはIPアドレスしか存在しない。
  4. 従ってSSL通信を行う場合はその接続するFQDN名のWebホストは単一の必要がある。

ファイル記述子の限界

個人的な見解

httpd.confへの設定

#名前ベースのバーチャルホスト宣言
NameVirtualHost *:80
#デフォルトWebホスト設定
<VirtualHost *:80>
ServerAdmin admin@localhost
DocumentRoot /var/www/html
ServerName www.test.local
ServerAlias test.local *.test.local
ErrorLog /var/log/httpd/error_log
CustomLog /var/log/httpd//access_log common
userdir disable
#suexec設定(2.0系)
SuexecUserGroup apache apache
#suexec設定(1.3系)
#User apache
#Group apache
<Directory /var/www/html>
Options All
AllowOverride All
</Directory>
</VirtualHost>

#IPベースのバーチャルホスト設定、宣言は不要
<VirtualHost xxx.xxx.xxx.xxx:443>
ServerAdmin admin@localhost
DocumentRoot /var/www/html
ServerName www.test.local
ServerAlias test.local *.test.local
ErrorLog /var/log/httpd/ssl_error_log
CustomLog /var/log/httpd/ssl_access_log common
userdir disable
SuexecUserGroup apache apache
<Directory /var/www/html>
Options All
AllowOverride All
</Directory>
</VirtualHost>

#他のバーチャルWebホスト設定を指定ディレクトリ配下に保存し読み込む場合の記述
Include /etc/httpd/conf/vhosts/*.conf

logrotateの設定ファイルサンプル

/etc/logrotate.d/httpd-vhosts

/var/www/vhosts/*/logs/access_log /var/www/vhosts/*/logs/error_log {
    daily
    rotate 365
    missingok
    sharedscripts
    dateext
    postrotate
        /bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true
    endscript
}