サーバをApacheからnginxに変更する場合に問題なのが.htaccessが使えなくなることです。nginxでの高速化は非常にメリットがありますが、Apacheの柔軟性もやはり便利です。 今回、nginxでPHPの値を変更しようとしたところ、思ったように動作しませんでした。正常に動作しなかった理由と対策方法を書きたいと思います。
まず、バージョンは以下の通り。nginx : 1.2.9
PHP : 5.2.17
この状態で以下のようにnginx.confを書きます。
… fastcgi_param PHP_VALUE "mbstring.internal_encoding=EUC-JP"; …
php-fpmとnginxをリロードしても<?php phpinfo(); ?>で値が変わりません。nginx.confで値を変更するには、PHP 5.3.3以降を使う必要があるようです。そのため、PHP 5.3.3以降をインストールすることにしました。
./configure –enable-fastcgiを指定すると、–enable-fastcgiは無効なオプションと警告が表示されます。PHPのconfigureオプションを見ると、5.3.0以降は–disable-cgiでFastCGIを有効化できるとありますが、–enable-fastcgiの項目では、–enable-cgiを使いますとあります。矛盾していますね。–enable-cgiを指定したところ問題なく動作しますので、FastCGIを使う場合は–enable-cgiオプションを使いましょう。
PHPをインストールし、php-fpmを起動、nginxをリロードしたところ、fastcgi_param PHP_VALUEで指定した値が有効になっていました。
ただ、すべてのVirtualHostでEUC-JPとなってしまうため、それぞれのVirtualHostで設定しなければなりません。やはり.htaccessは便利ですね。