[Nginx] try_files設定を試してみて、うまくいった件

Pocket
LINEで送る
GREE にシェア
LinkedIn にシェア

こんにちわ。
 

「nginx」を極めし者は、「インターネットサイト」を制する、ワケではないことは理解している、下駄です。
 

でも、最近ではもっぱら、apacheよりもnginxに傾いているのは、設定の簡易さや、サーバートラブルの少なさ、これらは、サーバー管理をする上では、非常に有効な効果と言えるでしょう。
 

もはや、LAMPではなくて、LNMPと言っても良いのではないかと考えるのは、自分だけでしょうか?
 

ところで、LNMPって、なんて読むの???

本日のIT謎掛け

「Nginx」と、かけまして、
 

「アメリカ先住民の主催する陸上競技で、海外選手に質問する時」と、ときます。
 

そのココロは・・・
 

・・・
 

おそらく、「アパッチ(apacheとapac)より、早い?」と言います。
 

Nginxのlocation設定でこんな事できるか思考

とあるサービスを構築していた時に、phpプログラムでリダイレクトを書けるのではなく、httpアクセス・ミドルウェアで、分岐を行いたい案件が発生しました。
 

こうした場合、通常であれば、サブドメインや、階層構造を分けて、物理的に分岐をさせておいて、
 

nginxのlocation設定で行うというパターンを考えましたが、
 

サブドメインを分けた場合、httpsを分けた数設定し、保有しなければいけなくなるので、できれば、1つのドメイン(サブドメイン)を使いまわして行いたいという設定にしたいので却下。
 

階層構造を分岐させる構造は、システムにおける、rootディレクトリ管理が複雑になるのと、実階層との差分が出てくると、検証作業などの複雑さがより増してくるので、却下。
 

他にもアクセスするファイル拡張子で判定する方法も検討したが、標準的ではない、拡張子を使うことは、あまり得策ではない為、却下。
 

そして、上記の却下した内容は、どれもNginxでは、柔軟に設定できてしまうので、こうしたやり方を熟知しておくことは、スキルとして重要ですね。

try_filesを使えばできるじゃないか

色々却下して、たどり着いたのが、try_filesを使った、サーバー内に任意ファイルが存在するかどうかで判断する方法でした。
 

これは、PHPなどのプログラム側で、キャッシュファイルとして設置したファイルの存在確認をして、ある場合とない場合で、設定を振り分けられるので、かなり有効に使える機能です。
 

実際の設定confは以下のような記述です。
 

 

 

ちょこっと解説

 

try_files [評価するファイルパス] locationリンク名(@リンク)
 

名称の通り、ファイルパスが存在するかどうかを判定してくれます。
 

おそらく本来は、”評価するファイルパス”を$uriとして、urlの中に文字列が存在するか確認するという意図で作られた機能だと推測できますが、ファイルの存在を確認してくれるというのが、非常に便利に使えるポイントです。
 

確かに、URI内部文字列のチェックだけなら、location設定の正規表現だけでできてしまうので、ある意味正しい使い方ですね。
 

この辺もシンボリック化することができれば、もう少しスマートに書けるんですが、このへんはもう少し調査してみましょう。

if機能は使わないほうが良いらしい

nginxには、if文が使える機能があるらしいのですが、どうやら海外で”if of nginx is evil.”「nginxのif文は悪魔」と言われるぐらい、悪性の機能らしいです。
 

通常のプログラムで考えられるようなif文とはかけ離れている挙動になるらしく、
 

使うとトラブル必須の機能なのだそうです。
 

詳しくは、ググってもらえるとたくさんブログに書いている人がいるので、使おうとする前に参考にするといいでしょう。
 

とりあえず、tri_filesを極めて便利に使えば、サーバーサイドプログラムではまかないきれない設定もできてしまうというサンプルでした。

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です