parâmetro de modificação de reescrita nginx

parâmetro de modificação de reescrita nginx

Estou tentando criar um proxy JSON/JSONP para uma API externa. Aqui está minha configuração até agora:

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;
        }
}

O proxy funciona bem sem callbackparâmetro, retornando JSON válido. No entanto, quando incluo o callback, ele ainda retorna apenas JSON sem o retorno de chamada envolvido. Tenho que retirar o callbackparâmetro antes de chamar a API externa, pois ele retornará um erro se a solicitação contiver opções não reconhecidas. Como posso retirar o parâmetro de retorno de chamada da solicitação (se existir) antes de passar a solicitação, mas ainda usá-lo para criar o JSONP?

Responder1

você leuse é mau?

ele ainda retorna apenas JSON sem o wrapper.

qual é a embalagem aqui para você? o primeiro/o segundo se ou ambos?

EDITAR:

eu faria uma depuração simples para testar, se o seu regex é válido (aumente o nível do log para ver o que está acontecendo) (a solução não foi testada)

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


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

        location /testurl  {
           return 200;
        }


}

após esta etapa eu colocaria a segunda instrução IF, e se funcionar, a primeira finalmente

como fica o seu URL com esses parâmetros de retorno de chamada?

informação relacionada