Kenichi Maehashi's Blog

脳内コアダンプ

RSS
Category: Linux
まぁ、ワイルドカード証明書なぞ持っていないのですが(汗
今後の覚書ということで。

mod_vhost_alias で、同一証明書 && 同一 IP && 複数コモンネーム(ホスト)が実現できます(CentOS 5.x だと RPM 標準、ソースインストールの場合は configure option が必要)。

<VirtualHost *:443>
VirtualDocumentRoot "/path/to/web/dir/%0"

SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/example.com.crt
SSLCertificateKeyFile /etc/pki/tls/certs/example.com.key
...
(超抜粋)

のように設定しておくと、

https://first.example.com/ --> /path/to/web/dir/first.example.com
https://second.example.com/ --> /path/to/web/dir/second.example.org

のようにマッピングしてくれるので、SSL じゃなくても何かと便利(サブドメインを増やした場合でも、conf の書き換えが不要になる)。
%0 だけでなく、%1 でドメインの最初のコンポーネント(first, second)などの指定もできる(Apache の mod_vhost_alias マニュアル)。

ただ、ユーザ名とサブドメイン名が完全に無関係な某特殊任務では使えないですね…。

追記: 2009/02/16
コメントに書いたことのまとめ編。最終的にこんな感じになった。

httpd.conf の VirtualHost コンテキストで
UserDir public_html
RewriteEngine on
RewriteMap vhostuser txt:/path/to/vhostuser.txt
RewriteCond ${vhostuser:%{HTTP_HOST}} .+
RewriteRule ^/(.*)$ /~%0/$1 [PT,NS]
のように設定(*1)。
そして、/path/to/vhostuser.txt に
# Subdomain          User Name
www.example.com user001
first.example.com user001
second.example.com user002
third.example.com user003
のようにマッピングを定義する。

マッピングを定義したファイルは、Apache の起動時に読み込まれるほか、mtime が変更されたことが検出された時点で再読み込みされるので、サブドメインを増やしたい場合はマッピングファイルだけ編集すればよい(Apache の再起動不要)。また、リクエストがあるたびにマッピングファイルを参照しに行くわけではないので安心。

詳しくは RewriteMap ディレクティブのドキュメントを読んでいただければいいのだが、定義したいサブドメインが大量にある場合はマッピングファイルをバイナリファイルに変換することでパフォーマンスの向上を行うことができる。また、マッピングを外部のプログラムから取得するように設定することもできるので、LDAP にサブドメイン名を突っ込んで YATTA! ってなことも夢じゃないです(*2)。

(*1) この VirtualHost には DocumentRoot / VirtualDocumentRoot は必須ではない(DocumentRoot や VirtualDocumentRoot を指定しておくと、マッピングファイルに定義されていないホスト名のリクエストが来た場合に利用される)。また、UserDir についても VirtualHost 外で定義済みなら不要。
(*2) 適切にキャッシュを取らないとひどく重いだろうけど...。
Category: Computer
======================================================
lib/Util.pm#make_content_disposition
- my $encoded = ($ua =~ /MSIE/ ? &Jcode::convert($filename, 'sjis') : Jcode->new($filename)->mime_encode(''));
+ my $encoded = ($ua =~ /MSIE/ ? &Jcode::convert($filename, 'sjis') : &Jcode::convert($filename, 'utf8'));
+ $encoded =~ tr/\r\n//;
======================================================

おそらく MIME ヘッダの folding の問題で、Apache が不正ヘッダ扱いしてくれちゃうんですよね。
WEB+DB PRESS Vol.48 を参考に、IE の場合は raw Shift_JIS、それ以外の場合は raw UTF-8 にしました。

日本語ロケール以外の Windows で動作する Internet Explorer や、Safari for Mac / Windows では正しく動作しないと思われます。
動作確認は日本語版 Windows XP 上の Internet Explorer 6, Firefox 2, および Opera 9.2、日本語版 Windows Vista 上の Internet Explorer 7 および Firefox 3 で行いました。
WEB+DB によれば Google Chrome についても生 UTF-8 で大丈夫なようです。

確認した限りでは、FreeStyle Wiki ではファイル名に改行コードを含むファイルを添付することはできないようになっているようでしたが、一応安全のため
$encoded =~ tr/\r\n//;
としておきました。
(cf. HTTP Response Splitting, HTTP Header Injection)

(追記)タイトルが不正確だったので訂正。すべての日本語添付ファイルが影響を受けるわけではありません。