Nginxのif文でOR的な条件を実現してみた

1 min

Nginxのlocationディレクティブでif文を使う時、phpとかのようにANDやORみたいな条件式を書くことができません。

擬似的にそれっぽく実装できた方法を書いておきます。

ORの条件分岐でやりたいこと

やりたかったのは「特定のリファラ(複数存在)からのアクセス以外は404」みたいな処理。

phpでいうところの

if ( $hoge == 'hoge' || $fuga == 'fuga' ) {
    // 処理
}

こんな分岐ができたらいいんですが……。

まともに書いてもダメそうなので、ここの記事を参考に亜種を作ってみました。

実際に動かしてみた

どこかのディレクティブにこんな感じで書けば動くんじゃないかな、多分。

set $check_referer false;
# リファラで許可するホストhogehoge.com
if ($http_referer ~ https?://hogehoge.com/(.*?)) {
    set $check_referer true;
}
# リファラで許可するホストfugafuga.jp
if ($http_referer ~ https?://fugafuga.jp/(.*?)) {
    set $check_referer true;
}
# リファラがhogehoge.comかfugafuga.jpでなければrewrite
if ($check_referer = false) {
    rewrite / permanent;
}

上書きしたらNginxのリロードは忘れずに。

一応やりたい動作は実現できたっぽいです。

さいごに

そもそもlocationディレクティブでif文は悪だと言われてる中で、容赦無くif文を連打してるあたり気持ち悪い書き方ですね。

こうでもしないとやりたいことが実現できなかったんだから仕方ない。

未経験からITエンジニアになりました!

今までは趣味としてプログラミングを独学してきたけど、やっぱりこれを仕事にしたい……!

そう思い立ったはいいものの、世間の情勢などもあり未経験でのエンジニア職の中途採用が絶望的な状況

大手転職エージェントを通して何社も面接を受けては落ちてを繰り返し、諦めかけていたのですが……。

気分転換で登録した転職サービスで、とある企業から内定をいただくことができました

同じように未経験からITエンジニアを目指している方へ、どんなに厳しくても可能性がゼロではないことを伝えたい。

ポイントは、IT業界に精通した転職サービスを利用すること。
これだけで少なくとも面接へ進める可能性がグッと高くなります。

あなたがもしIT特化の転職サービスに未登録で苦しんでいるなら、ぜひ利用してみてください。きっと可能性が広がりますよ!

\無料のIT系転職サービス/

はるしか

はるしか

ゲーム・漫画・クルマ・ガジェットなど多趣味な雑食系。
モノづくりが楽しくてプログラミングをポチポチしてたら本業エンジニアになってしまったASPの中の人。
動物占いは子鹿。
忘れっぽい自分へのメモ代わりの記事が多めです。

FOLLOW

カテゴリー:
タグ:
関連記事

コメントを残す

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