【问题标题】:Nginx - Reacting to Upstream ResponseNginx - 对上游响应做出反应
【发布时间】:2016-04-30 08:58:05
【问题描述】:

我使用 nginx 作为反向代理,通过外部提供商上传文件存储。 当我处理文件上传时,我需要在将响应返回给用户之前跟踪(在我的数据库中)上传是否成功。因此,我想使用 lua-nginx-module 中提供的ngx.location.capture 方法与我的后端讨论请求的结果。由于我需要等待上游服务器的响应,我只能在header_filter_by_lua 中发出捕获。不幸的是,我无法在header_filter_by_lua 中发出任何对外交流。 ngx.location.capturengx.socket.*ngx.exec 仅在响应尚未到达时可用。

如何对 nginx 中的上游响应做出反应?

我想过的其他方法:

  • 让脚本监视访问日志,然后发出 curl 请求。 (似乎应该有更简单的方法)
  • 最初通过 content_by_lua 中的 ngx.location.capture 发送文件(我认为这不能处理高达 5 GB 的文件大小)

感谢您的帮助:)

【问题讨论】:

  • 我通过使用os.execute("curl [...]") 绕过了这个限制,这感觉完全错误但有效。注意将用户生成的输入传递到 shell!

标签: nginx lua reverse-proxy openresty


【解决方案1】:

用于/upload 位置: content_by_lua_fileresty.upload module

【讨论】:

  • 好建议。仅此一项就不允许我将请求正文完全发送到上游,但我发现 lua-resty-http 应该可以进行大量上传。这样,我还可以在 Lua 中更渐进地以编程方式定义我对客户的响应。
  • @user2474697 ,这是个好方法,但请记住它涉及一些 https 问题。我还没有找到检测正确序列键的解决方案。
猜你喜欢
  • 2021-02-18
  • 2017-01-24
  • 2015-07-06
  • 2017-11-08
  • 2019-03-04
  • 1970-01-01
  • 2014-03-23
  • 1970-01-01
  • 2021-03-15
相关资源
最近更新 更多