簡體   English   中英

如何將結果 api 響應用於 proxy_pass 屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM