微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 lua-resty-http 请求模块代理传入的上传文件发布请求

如何解决使用 lua-resty-http 请求模块代理传入的上传文件发布请求

我正在尝试使用 lua-resty-http 模块代理请求。我目前正在为 http 请求传递标头、正文、请求方法和 url,它工作正常。但是当文件上传发布请求到来时,它无法这样做,显然我还没有配置它这样做。所以我也想代理这种类型的请求。这是我到目前为止的代码的快照,我应该进行哪些更改以提取文件上传数据并使用 lua-resty-http 模块发送 ->

    local http = require "resty.http"
    local cjson = require "cjson"
    local httpc = http.new()
    local path = ngx.var.request_uri

    local passHeader = {["cookie"]=ngx.req.get_headers()["cookie"]}
    passHeader["content-type"] = ngx.req.get_headers()["content-type"]

    ngx.req.read_body();
    body = ngx.req.get_body_data();
    
    local original_req_uri = "https://"  .. "fakehost.com" .. path
    
    local req_method = ngx.req.get_method()

    local res,err = httpc:request_uri(original_req_uri,{
      method = req_method,ssl_verify = false,keepalive_timeout = 60000,headers = passHeader,keepalive_pool = 10,body = body
    })

解决方法

阅读文档!

https://github.com/openresty/lua-nginx-module#ngxreqget_body_data

POST 请求可能包含大 body,nginx 可能会将其写入磁盘文件。

如果请求正文已读入磁盘文件,请尝试调用 ngx.req.get_body_file 函数。

PS:IMO 通过 Lua 代理 HTTP 请求的方法不是最佳的,因为它是完全缓冲的方式。对我来说,只有当我们需要发出子请求时才有意义。对于处理大多数请求的主路径,我建议使用 proxy_pass。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。