parámetro de modificación de reescritura de nginx

parámetro de modificación de reescritura de nginx

Estoy intentando crear un proxy JSON/JSONP para una API externa. Aquí está mi configuración hasta ahora:

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

El proxy funciona bien sin ningún callbackparámetro y devuelve JSON válido. Sin embargo, cuando incluyo el callback, todavía devuelve solo JSON sin la devolución de llamada que lo rodea. Tengo que eliminar el callbackparámetro antes de llamar a la API externa, porque devuelve un error si la solicitud contiene opciones no reconocidas. ¿Cómo puedo eliminar el parámetro de devolución de llamada de la solicitud (si existe) antes de pasar la solicitud pero aún usarlo para crear el JSONP?

Respuesta1

Leístesi es malo?

todavía devuelve solo JSON sin el contenedor.

¿Cuál es el envoltorio aquí para ti? el primero/el segundo si o ambos?

EDITAR:

Haría una depuración simple para probar si su expresión regular es válida (aumentaría el nivel de registro para ver qué sucede) (la solución no se ha probado)

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


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

        location /testurl  {
           return 200;
        }


}

Después de este paso, pondría la segunda declaración IF, y si eso funciona, finalmente la primera.

¿Cómo se ve tu URL con esos parámetros de devolución de llamada?

información relacionada