【发布时间】:2016-04-30 08:58:05
【问题描述】:
我使用 nginx 作为反向代理,通过外部提供商上传文件存储。
当我处理文件上传时,我需要在将响应返回给用户之前跟踪(在我的数据库中)上传是否成功。因此,我想使用 lua-nginx-module 中提供的ngx.location.capture 方法与我的后端讨论请求的结果。由于我需要等待上游服务器的响应,我只能在header_filter_by_lua 中发出捕获。不幸的是,我无法在header_filter_by_lua 中发出任何对外交流。 ngx.location.capture、ngx.socket.* 和 ngx.exec 仅在响应尚未到达时可用。
如何对 nginx 中的上游响应做出反应?
我想过的其他方法:
- 让脚本监视访问日志,然后发出 curl 请求。 (似乎应该有更简单的方法)
- 最初通过 content_by_lua 中的 ngx.location.capture 发送文件(我认为这不能处理高达 5 GB 的文件大小)
感谢您的帮助:)
【问题讨论】:
-
我通过使用
os.execute("curl [...]")绕过了这个限制,这感觉完全错误但有效。注意将用户生成的输入传递到 shell!
标签: nginx lua reverse-proxy openresty