我正在尝试为外部 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
你读过吗if 是邪恶的?
它仍然只返回没有包装器的 JSON。
这里的包装器是什么?第一个/第二个,还是两者兼而有之?
编辑:
我会进行简单的调试来测试,看看你的正则表达式是否有效(增加日志级别来查看发生了什么)(解决方案尚未测试)
server {
listen 80;
server_name api.example.com;
location /api/ {
rewrite ^/(.*)callback=[^&]*(.*)$ /testurl/$1/$2 last;
}
location /testurl {
return 200;
}
}
完成此步骤后,我将输入第二个 IF 语句,如果有效,则第一个语句最终
你的 URL 和回调参数看起来怎么样?