やっぱ試したいんで、PHP抜きの単純な奴を立ててみた。Lighttpd+mod_simple_vhostから置き換えやすいように、/srv/www/vhostsの下にホスト名のディレクトリやシンボリックリンクを置くだけの形にして、デフォルトサーバはアクセス禁止で。
nginx.confのserverブロックはこんなん。
server { deny all; } server { server_name ~\.[a-zA-Z]+\.?$; root /srv/www/vhosts/$host; index index.php index.html index.htm; location ~ /\.ht { deny all; } }
この程度で普通に動く。一見。定数を逃がしたりディレクトリの存在を判定したりすれば、もっとmod_simple_vhost互換っぽくなりそう。別に要らないけど。
一つ目のserverブロックでデフォルトサーバを拾って、二つ目のserverブロックでFQDNっぽいホスト名を全部拾っている。server_nameのしょぼいREがその判定。もっとマシなREは無いのか。
rootのとこは良く見る書き方。$hostは基本的にHostリクエストヘッダを拾ってくるので、
GET /shadow HTTP/1.0 Host: ../../../etc
みたいなかっこいいリクエストを送ったらどうなるか気になったけど、普通に400が返ってきたので安心した。ちなみにLighttpd+mod_simple_vhostでも400。../vhosts/foo
みたいに書いても400。
他にちょっといじったとこの差分をまとめると、
log_format main '$remote_addr $host - #以下略 tcp_nopush on; server_name_in_redirect off; server_tokens off;
こんなもん。
log_formatは$hostを埋めただけ。
tcp_nopushは多分TCPパケット送信アルゴリズムの最適化だけど、FreeBSDだとbuggyだとか書いてあった。Linuxだしいいんじゃね。知らんけど。TAFとかふつー0ですしねゲーマー的に。それは微妙に違う話ですね。
server_name_in_redirectは何となく。UseCanonicalName Onにいい思い出が無いので。多分どうでもいい。むしろ間違った選択かもしれない。
server_tokensは普通にoffでいいんじゃね。
で、このまま実験終了でもいいけど、どうせならPHPも走らせてみるかなあ。インストールするもんが急に増えるけど、PHP-FPM立てるまでの手間は大したこと無いし。
あ、CGIだけLighttpdかApacheに流す手もあるかも。そしたらメインサーバで普通にNginx行けるかも。
つーかApacheに流すならmod_phpも使えるなあ。有利かどうかは分からんけど。
ていうかそれLighttpdだけでいいんじゃね?
ていうか話がループしてね?