0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

nginxの備忘録

Posted at

今月は新卒の研修ぶりくらいにnginxを触ったのですが、あまりになじみがなくて苦戦したので万一もう一度出会った時のために整理しておこうと思います。

まず、nginxの設定ファイルをいじるときは下記を見る。
sudo vi /etc/nginx/nginx.conf

🐈ファイル内でincludeしているのであればそちらに書き加えても問題なし

今回は認証処理の書き換えだったので下記のようなserverブロックを変更しました。

#例
    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        include /etc/nginx/default.d/*.conf;
    }

serverブロック内にifが欠けるのですが、なんとifのネストができない!
てっきりsudo nginx -tで指摘が入るとおもいきや、指摘されずerror.logに上がっていました。
条件はあっているはずなのに上手く動かないときはマメにエラーログも見ておくことをお勧めします。
エラーログの確認はsudo tail /var/log/nginx/error.log

ifのネストの代替

ifのネストの代わりにフラグを利用するようです。

set $is_A 0;
set $is_B     0;
set $is_C 0;

if ({your conditionA}) {
    set $is_A 1;
}

if ({your conditionB}) {
    set $is_B 1;
}

set $is_C "${is_A}${is_B}";

if ($is_C = "11") {
        return 400;
}

ifとlocationの実行順

前から評価されていくのか……!?という疑問を基にDevelopment guideを発見しました。

ドキュメントでは
NGX_HTTP_SERVER_REWRITE_PHASENGX_HTTP_FIND_CONFIG_PHASENGX_HTTP_REWRITE_PHASE
となっているので、server直下のif文→location直下のif文となるようです。

認証などはさらにその後ですね。

# 1.NGX_HTTP_SERVER_REWRITE_PHASE
if ({your conditionA}) {
    return 400;
}

# 2.NGX_HTTP_FIND_CONFIG_PHASE
location ~ /auth/ {
    # 3.NGX_HTTP_REWRITE_PHASE
    if ({your conditionB}) {
        return 400;
    }
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    proxy_pass http://127.0.0.1:8080;
}

request_uriとuriは何が違う?

  • request_uri:オリジナルのURI
  • uri:正規化されたURIで、内部リダイレクト実行時などに変更される可能性あり

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?