我的客户端在NGINX服务器上带有加密的URI。Nginx必须通过向API发送请求来解密它。此API调用的结果是解密的URI被用作代理URI。
我已经使用njs插入nginx进行API调用,但是我在" redirect_uri"变量处理程序中捕获了此错误" async操作"
http{
js_set $redirect_uri redirect_uri;
server {
location ~ ^/upload/(.*)$ {
proxy_request_buffering off;
resolver 127.0.0.1 ipv6=off;
proxy_pass '$redirect_uri';
}
}
}
function redirect_uri(r) {
r.uri.replace("/upload/", "");
r.subrequest('/api/decrypt-uri/'+hash, { method: 'POST' }, function(res) {
if (res.status != 200) {
r.return(res.status);
return;
}
var data=res.responseBody.toString();
return data;
});
}```
2019/07/30 15:55:07 [error] 10667#10667: *1 async operation inside "redirect_uri" variable handler, client: 127.0.0.1, server: api, request: "POST /upload/aHR0cHM6Ly9rbm94LmJpZ2RhdGEuaW5mcmEuZGdmaXAvZ2F0ZXdheS9kZWZhdWx0L3dlYmhkZnybXF5OHYtMDdWeFVaQ1JheFFTRTMxeTJ2Z0hhOHFmV002WkhsRzItQWtRLXVRd2ZvblZpX2lyMDlxZU9IZUtMWHdyejdNTnFJeEdMdFZqSk0= HTTP/1.1"
这看起来与这里问的问题相似:https://github.com/nginx/njs/issues/213,带有答案:
r.subrequest(((或在JS_SET变量处理程序中不支持settimeout((((例如settimeout(((的任何异步函数。 您需要使用auth_request指令。请参阅一个相关的示例。