nginxのlocationディレクリブ内のリダイレクト処理に関して。
結構長い間携わっていますが、適当に理解していた部分が多かったので再度復習です。
特にドメインのサブディレクトリでサービスを運用しようとなったときにはまることが多いです。
Contents
root
nginxのrooは読んで字のごとくrootディレクトリです。ドメインは基本的にこの後に追加されます。
例えばrootが/var/www/htmlになっており、http://sample.com/hoge/foo.phpとアクセスすると
root + ドメイン以下のhoge/foo.phpとなり /var/www/html/hoge/foo.phpにアクセスすることになります。
rewrite
読んで字のごとくURLの書き換えを行います。
例えば/var/www/html/hoge/html直下にアクセスしたい、だけどルートディレクトリはvar/www/htmlにしたいときは一筋縄ではいきません。
http://sample.com/hogeでアクセスした場合に/var/www/html/hoge/html/直下にアクセスさせなければいけません。
その場合下記のように書きます。
1 |
rewrite ^/hoge/(.*)$ /hoge/html/$1 break; |
この手のフレームワークは結構あるので要注意。
ちなみにrewrite_log onと書いてあげることでログを見ることができます。
Nginx の rewrite(リダイレクト) をデバッグする
try_files
アクセスの優先順位を決めます。
1 |
try_files $uri $uri/ /hoge.html; |
などと書いた場合には
- $uriというファイルを見に行く ($uriはドメイン以下のurlの部分)
- 1がなければ$uriというディレクトリを見に行く
- 2もなかった場合,/hoge.htmlというファイルを見に行く
という意味になります。
下記はnginxのわかりやすいリンクです。
https://gist.github.com/kenjiskywalker/4596258
nginxでFuelPHPを使うためのrewrite設定方法
注意点
nginxでファイルを読み込むときにcss/js/画像ファイルも有効に仕上げないと読み込まれないケースがあります。
1 2 3 4 5 |
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico)$ { root /var/www/html; access_log off; expires 30d; } |
上記のような記述を書いてあげましょう。
[…] http://skill-up-engineering.com/?p=1784 のrootの項目を参照 […]