nginxでrestfulアクセス対応
昨日、twitterのアクセストークンが消し飛ぶという謎の事象にまる1日悩まされました。
アクセスログなどを追ってみたところ、faviconへのアクセスがウェブアプリへのアクセスと誤認され、ヒットしないアクションだったせいでドキュメントルートにリダイレクトされ、そのアクセスがトークンを再発行してしまっていました。
なんという連続コンボ…
fuelPHPなど、restfulなURL対応のために.htaccessを書き換えたりする機会が増えましたが、nginxについては設定・調査が甘かったので、改めて書きなおしたものを晒してみます。
server { server_name *******.jp; root /var/www/public; charset utf-8; index index.php; access_log /var/log/nginx/access_log; error_log /var/log/nginx/error_log; # ディレクトリを避ける (asset) # 画像やCSSなどはassetディレクトリに集約して避ける location ^~ /asset/ { access_log off; log_not_found off; } # 直下ファイルを避ける (favicon.ico) # 勝手に呼び出されるので、これも明示的に避けておく location = /favicon.ico { access_log off; log_not_found off; } # 上のファイルに該当しないアクセスはトライしてみる # PHPのアクセスがここに来る location / { try_files $uri $uri/ @webapp; } location @webapp { rewrite ^/(.*)$ /index.php?$1 last; } }
locationにヒットした順に処理からは抜けるようなので、アプリアクセスURLを残して除外していくように記載すればよさそうです。
ちなみに、画像やfaviconアクセスはログを落とさないよう、access_logをoffしてます。
この良し悪しはサービスの用途によりますね。