nginx 内の場所から別の場所にジャンプできますか?

nginx 内の場所から別の場所にジャンプできますか?

私は次のようなことを実現しようとしています:

location /location1/{
    if ($arg_api_key = a_valid_api_key) {
         proxy_pass http://localhost:8080;
    }
    # else jump to location2
}
location /location2/{
    # a lot of validation code here
}

nginx ではどのように実行しますか? または、もっと良い処理方法がありますか?

答え1

まず覚えておいて悪であればrewriteまたは以外のものをreturn内部に入れないようにしてくださいif。回避策としては、 を使用してerror_pagereturnリクエストの処理に使用する場所を変更することが提案されています。

としてすでにここで回答済みnginx で場所設定を再利用するには、それらを別のファイルに移動し、includeそのファイルをlocationブロック内に配置します。

これらのソリューションを組み合わせると、次のようになります。

検証コード.conf

# a lot of validation code here

メイン設定

location /location1/ {
    error_page 418 = @proxy;
    recursive_error_pages on;
    if ($arg_api_key = a_valid_api_key) {
        return 418;
    }
    include /etc/nginx/validation_code.conf;
}

location /location2/ {
    include /etc/nginx/validation_code.conf;
}

location @proxy {
    proxy_pass http://localhost:8080;
}

検証コード用に別のファイルを作成する代わりに、名前付きの場所を使用することも考えられます。ただし、その名前付きの場所に切り替えるには、いくつかのトリックが必要になります。たとえば、別のerror_page/returnペア、または次のようなものなどです。

    try_files /nonexistent @validation

関連情報