2016-01-23 81 views
0

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

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

其他方法我也想过:

  • 有一个剧本看访问日志,然后发出一个卷曲的请求。 (好像应该有一个更简单的方法)
  • 最初通过ngx.location.capture发送文件中content_by_lua(我不认为这会处理高达5 GB的文件大小)

帮助表示赞赏: )

+0

我去解决这一限制使用'os.execute( “卷曲[...]”)'这感觉完全错误的,但工程。注意将用户生成的输入传递到shell中! – user2474697

回答

0

使用了/upload位置: content_by_lua_fileresty.uploadmodule

+0

很好的建议。这本身不会让我完全发送请求主体上游,但我发现[lua-resty-http](https://github.com/pintsized/lua-resty-http)应该启用大量上传。通过这种方式,我还可以在Lua中更加逐步和程序化地定义我对客户的响应。 – user2474697

+0

@ user2474697,这是很好的方法,但请记住它涉及到一些https问题。我还没有找到解决方案来检测正确的密钥。 – Vyacheslav