私は次のようなことを実現しようとしています:
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_page
、return
リクエストの処理に使用する場所を変更することが提案されています。
としてすでにここで回答済み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