location / {
if (!-f $request_filename) {
proxy_pass http://some-url;
include /etc/nginx/proxy_params;
break;
}
}
上記設定を含んだ状態で起動しようとすると下記エラーが発生します。
[root@host]# service nginx start Restarting nginx: nginx: [emerg] "include" directive is not allowed here in /etc/nginx/sites-enabled/foo:21 nginx: configuration file /etc/nginx/nginx.conf test failed
調べてみると、if 文の中ではincludeはできないようです。さらに、nginx において if は可能な限り避けろという話が見つかりました。予測できない動きをすることがあり、場合によってはクラッシュの危険もあるとか。
http://forum.nginx.org/read.php?2,123451,123462#msg-123462
http://wiki.nginx.org/IfIsEvil
ということで、別の方法を模索します。今回の目的なら代わりに try_files が使えます。
http://heartbeats.jp/hbblog/2012/04/nginx05.html
上記URLを参考に書いてみましょう。
location / {
try_files $uri $uri/ @proxy;
}
location = / {
try_files $uri @proxy;
}
location @proxy {
proxy_pass http://some-url;
include /etc/nginx/proxy_params;
}
location が "/" と完全一致の時の設定に注意してください。try_files に $uri/ が指定してあると、directory index を試みて 403 エラーになってしまいます。そのため "/" との完全一致で $uri/ を抜いた try_files を指定しておきます。
※この記事について指摘・意見・提案・感想などありましたら下のコメント欄にどうぞ。
0 件のコメント:
コメントを投稿