我们部分地将nginx访问控制委托给一个单独的服务,我们使用access_by_lua_file和lua-resty-hawk以及子请求来对请求进行身份验证。
docs说:
在启动子请求之前,您应该始终阅读请求正文(通过调用ngx.req.read_body或配置lua_need_request_body)。
最初我们错过了这个细节,出现的事情正在发挥作用。我试图找到关于这个要求的更多背景信息,但是空洞了。
在阅读正文之前授权请求会很好,因为如果客户端只是尝试上传各种垃圾并填充我们的磁盘,我们可以提前终止连接并阻止一种DoS攻击。 / p>
为什么会出现这种限制?
答案 0 :(得分:1)
由于没有人回答这个问题,我想通过引用官方文件来澄清原因。
always_forward_body
设置为true时,如果未指定body
选项,则当前(父)请求的请求正将始终转发到正在创建的子请求。由ngx.req.read_body()或lua_need_request_body on读取的请求正文将直接转发到子请求,而不会在创建子请求时复制整个请求正文数据(无论请求正文数据是缓冲在内存缓冲区还是临时文件中) 。默认情况下,此选项为 false ,并且未指定body选项时,仅在子请求采用PUT或POST请求方法时转发当前(父)请求的请求正文。
简而言之,如果未指定选项主体,则可以使用当前请求的主体,因此您需要首先读取请求主体。
正如您所看到的,这不是强制性的,因此您的案例中的内容似乎有效。