Я пытаюсь создать JSON/JSONP proxy для внешнего API. Вот моя конфигурация на данный момент:
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 без оболочки.
какая здесь обёртка для вас? первая/вторая или обе?
РЕДАКТИРОВАТЬ:
Я бы выполнил простую отладку, чтобы проверить, является ли ваше регулярное выражение допустимым (увеличить уровень логирования, чтобы увидеть, что происходит) (решение не проверено)
server {
listen 80;
server_name api.example.com;
location /api/ {
rewrite ^/(.*)callback=[^&]*(.*)$ /testurl/$1/$2 last;
}
location /testurl {
return 200;
}
}
после этого шага я бы вставил второй оператор IF - и если это сработает, то первый, наконец,
как выглядит ваш URL с этими параметрами обратного вызова?