それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

nginx で特定の拡張子をphpで処理する(SetHandler代替)

特定の拡張子をphpなどで処理する

css や js だけじゃなく 画像などをphpで処理したい。Apacheだと addhandler / sethandler で出来るアレ。nginx でもやろうかなと。

画像のリクエストログやリサイズをWebサーバーでやってるとかったるいので、phpで処理してキャッシュ制御すれば楽だよね。セッションチェックとかさ。

nginx での設定例

拡張子php と zip を php-fpmに飛ばしている例。

    location ~ \.(php|zip)$ {
      include fastcgi_params;
      fastcgi_param PATH_INFO $fastcgi_path_info;
      fastcgi_param SCRIPT_FILENAME /var/www/example.com/public/info.php$fastcgi_script_name;
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      fastcgi_pass unix:/path/to/php-fpm.sock;
    }

ポイント

SCRIPT_FILENAME の指定 。

php の場合は SCRIPT_FILENAME を使ってPATHINFOで実行するファイルを指定することが出来て、これをphp-fpm経由にしてあげれば、任意のファイルを好きなファイルで処理できる。便利。

PATHINFOで取得した場合

$_SERVER['ORIG_SCRIPT_FILENAME']
$_SERVER['ORIG_SCRIPT_NAME']

リクエストされたファイル名

$_SERVER['PATH_TRANSLATED']