Nginx внутренне вызывает другой запрос и возвращает данные этого запроса

Nginx внутренне вызывает другой запрос и возвращает данные этого запроса

Я использую nginx и lua для парсинга моего rest api (https://openresty-reference.readthedocs.io/en/latest/Lua_Nginx_API/) . Я пытаюсь вызвать другой API внутри моего вызова rest, который является другим сервером, и вернуть этот ответ. Но он всегда получает пустой ответ. Ниже приведена моя конфигурация, я запрашиваю для /student, любая помощь будет весьма признательна

location /student {
    content_by_lua '
    local str = "test"
    local res = ngx.location.capture("/detail",{method = ngx.HTTP_POST, body = str})
    ngx.say(str)
    ';
}
location /detail {
    set $target '104.28.17.1/post';
    set $pass 'Basic Y2l28=';
    lua_need_request_body on;
    content_by_lua '
    proxy_set_header          Host            $host;
    proxy_set_header          X-Real-IP       $remote_addr;
    proxy_set_header          X-Forwarded-For $proxy_add_x_forwarded_for;
    #access_by_lua '
    proxy_set_header Authorization $pass;
    proxy_set_header Content-Type 'application/x-www-form-urlencoded';
    proxy_set_header Accept '*/*';
    proxy_set_header Connection 'keep-alive';
    proxy_pass http://$target;
}

решение1

вы можете использовать resty.http для вызова в lua и записать его в тело. Ниже для вызова https с аутентификацией в api:

-- load requirements 
http = require "resty.http"

local function api_request(ip, api_host, api_hostname, api_cred, api_url)
  local httpc  = http.new()
  httpc:set_timeout(500)
  path = api_host .. string.format(api_url, ip)
  local response, err = httpc:request_uri(path,{
      method = "GET",
      headers = {
          ["Authorization"] ="Basic " .. api_cred,
          ["Host"] = api_hostname,
      },
      ssl_verify = false,
  })
  return response
end

Связанный контент