nginx 書き換えパラメータの変更

nginx 書き換えパラメータの変更

外部 API 用の JSON/JSONP プロキシを作成しようとしています。これまでの設定は次のとおりです。

server {
        listen          80;
        server_name     api.example.com;
        location /api/ {
                if ( $arg_callback ) {
                        echo_before_body '$arg_callback(';
                        echo_after_body ');';
                }
                if ($args ~ (.*)callback=[^&]*(.*)) {
                        set $args $1$2;
                }
                proxy_pass      http://api.external.com;
                rewrite ^/api/(.*)$ /external/api/$1?api_key=MY_KEY$is_args$args break;
        }
}

プロキシはcallbackパラメータなしでも正常に動作し、有効な JSON を返します。ただし、 を含めると、callbackコールバックがラップされていない JSON のみが返されます。callbackリクエストに認識されないオプションが含まれているとエラーが返されるため、外部 API を呼び出す前にパラメータを削除する必要があります。リクエストを渡す前にコールバック パラメータ (存在する場合) を削除し、それでも JSONP の作成にそれを使用するにはどうすればよいでしょうか。

答え1

読んだ悪であれば?

それでも、ラッパーなしの JSON のみが返されます。

ここでのラッパーとは何ですか? 1 番目/2 番目の if または両方ですか?

編集:

正規表現が有効かどうかをテストするために簡単なデバッグを実行します(何が起こっているかを確認するにはログ レベルを上げます)(解決策はテストされていません)

server {
        listen          80;
        server_name     api.example.com;
        location /api/ {


                rewrite ^/(.*)callback=[^&]*(.*)$ /testurl/$1/$2 last;  
        }

        location /testurl  {
           return 200;
        }


}

このステップの後、2番目のIFステートメントを入れます。それがうまくいけば、最初のステートメントが最後に

コールバックパラメータを使用した場合の URL はどのようになりますか?

関連情報