nginx のバージョン 0.7 系が stable になっていたので、サーバソフトウェアのアップデートを行いました。(久しぶりのブログの更新は OpenSolaris 2009.06 について書こうと思ってたんですが、これはまた後で。。。)
インストールしたのは nginx 0.7.59 です。リリースのアナウンスが 25 May 2009 なので、2週間くらい前に出たばかりだったようです。 0.6系と0.7系の間の変更点についてまとまっている資料を探したのですが、見つかりませんでした。
Change Log を見るとかなりの修正箇所があるようですが、大きくまとめると以下の機能が増えているようです。
*) caching of proxied and FastCGI servers; *) "try_files" directive; *) the "location" and "server_name" directives support captures in regular expressions; *) XLST and image filters; *) a preliminary IPv6 support; *) nginx/Windows.
WindowsサポートとIPv6、あまり関係なさそう。。。
try_filesはファイルを探す順番を指定するディレクティブで、例えば「あるファイルが存在する場合はメンテナンス画面を表示する」ような場合、今までは if 文をいくつか書いて条件分岐させていたのをすっきりと記述することが出来るようです。設定例を見るといろいろな応用が出来るようです。
インストールはいつもの通り
./configure --with-http_stub_status_module --with-http_gzip_static_module --with-cc-opt='-O3' make make install
だけで大丈夫でした。
ただ、私の環境ではなぜか configure が途中で失敗していて、しばらくはまりました。結局は .bash_profile で環境変数 CC と CFLAGS を指定していたのが原因でした。nginx の configure スクリプトは autoconf で作られたものでは無いので、予想もつかないところが問題になるなぁ。
nginx 0.6 系で使用していた nginx.conf で起動させたところ、2点ほど問題がありました。
- gzip_types に text/html を設定していると警告が出る。
gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
0.6系では上のような設定で問題ありませんでしたが、0.7 では以下の警告が出ます。
duplicate MIME type “text/html” in /etc/nginx/nginx.conf
text/html は暗黙的に設定されているようなので、以下のように修正。
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
- 特定のPHPファイルだけ BASIC認証させていたが、PHPとして実行されなくなった。
WordPress のログインページを BASIC 認証をさせるために、以下のような設定をしていました。
location /wordpress/wp-login.php { auth_basic "secret"; auth_basic_user_file htpasswd; }
nginx 0.6 系では BASIC 認証後に wp-login.php が実行されていましたが、0.7系では BASIC認証はされるものの、PHPファイルが実行されずにソースファイルがそのまま転送されてきました。
どのように修正すべきか分からなかったので、以下のように fastcgi の設定を入れて ad hoc に修正しました。
location /wordpress/wp-login.php { auth_basic "secret"; auth_basic_user_file htpasswd; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; include fastcgi_params; }
こういうケースでは今後は try_files ディレクティブを使えって事なんでしょうね。