[英]How can I use the result api response to the proxy_pass attribut
我的客戶端在 nginx 服務器上帶有加密的 URI。 NGINX 必須通過向 API 發送請求來解密它。 此 API 調用的結果是解密后用作代理 URI 的 URI。
我已經使用 NJS 插件為 NGINX 進行 API 調用,但我發現了這個錯誤“在“redirect_uri”變量處理程序中的異步操作”
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 ,答案是:
js_set 變量處理程序不支持 r.subrequest()(或任何異步函數,如 setTimeout())。 您需要使用 auth_request 指令。 請參閱相關示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.