2009年 11月 の記事

mod_vhost_alias が普及しない理由

  • 2009年 11月 8日
  • カテゴリー : apache

バーチャルホストが多くなってくると、同じ設定を繰り返すことが無駄に思えて自動化・構造化したくなってくるのが人の情というもの。 バーチャルホストを動的に割り当てる方法には、mod_rewrite で強制的に割り当てる方法と、mod_vhost_alias を使う方法があるけれども、返す環境変数がそれぞれ異なってしまう問題がある。 http://sub.example.com  を /home/exmaple.com/plublic_html/sub/ に割り当てる際のバーチャルホスト設定として、下記の3種の方法を試し、その際に返すDOCUMENT_ROOTを取得してみた。 (1) VirtualHost <VirtualHost *> DocumentRoot /home/example.com/public_html/sub/ ServerName sub.exmaple.com </VirtualHost> 結果 /home/example.com/public_html/sub/ (2) mod_rewrite <VirtualHost *> DocumentRoot /home/example.com/public_html/ ServerName example.com ServerAlias *.example.com RewriteEngine On RewriteCond %{HTTP_HOST} ^[^.]+\.example\.com$ RewriteRule (.*) %{HTTP_HOST}$1 [C] RewriteRule ^([^.]+)\.example\.com(.*) /home/example\.com/public_html/$1/$2 [L] </VirtualHost> 結果 /home/example.com/public_html/ (3) mod_vhost_alias UseCanonicalName Off VirtualDocumentRoot /home/%2+/public_html/%1 結果 /home 以上のように、(2)または(3)の設定で、DOCUMENT_ROOTを、(1)の状態で扱うことはできない。 この不具合によって、環境変数を参照するCGIやモジュールに正常な動作は期待できない。 mod_vhost_alias のこの不具合はbugzillaで報告されているが、解消される様子はない。 https://issues.apache.org/bugzilla/show_bug.cgi?id=26052 具体的には下記のように環境変数が異なる。 ■vhost <VirtualHost *> DocumentRoot /var/www/html/exmaple.com/public_html/ ServerName exmaple.com </VirtualHost> DOCUMENT_ROOT="/var/www/html/exmaple.com/public_html/sub/" GATEWAY_INTERFACE="CGI/1.1" HTTP_ACCEPT="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" HTTP_ACCEPT_CHARSET="Shift_JIS,utf-8;q=0.7,*;q=0.7" HTTP_ACCEPT_ENCODING="gzip,deflate" HTTP_ACCEPT_LANGUAGE="ja,en-us;q=0.7,en;q=0.3" HTTP_CONNECTION="keep-alive" HTTP_HOST="sub.exmaple.com" HTTP_KEEP_ALIVE="300" HTTP_REFERER="http://sub.exmaple.com/" HTTP_USER_AGENT="Mozilla/5.0 (Windows; U; Windows NT 6.1; ja; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)" PATH="/bin" QUERY_STRING="" REMOTE_ADDR="192.168.10.2" REMOTE_PORT="65356" REQUEST_METHOD="GET" REQUEST_URI="/printenv.cgi" SCRIPT_FILENAME="/var/www/html/exmaple.com/public_html/sub/printenv.cgi" SCRIPT_NAME="/printenv.cgi" SERVER_ADDR="192.168.0.2" SERVER_ADMIN="admin@exmaple.com" SERVER_NAME="sub.exmaple.com" SERVER_PORT="80" SERVER_PROTOCOL="HTTP/1.1" SERVER_SIGNATURE="" SERVER_SOFTWARE="Apache/2.2.14 (Unix)" ■rewrite <VirtualHost - [ 続きを読む ]