2016-01-23 27 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