问题是一些物联网设备正在发送带有错误的Content-Length标头的HEAD请求.这使得Nginx等待更多内容然后超时.
删除Content-Length标头或将其设置为0都可以解决问题.
例
这失败了
HEAD / HTTP/1.1
Host: MY_HOST
Content-Length: 59
Content-Type: text/html
Connection: close
这工作(内容长度:0)
HEAD / HTTP/1.1
Host: MY_HOST
Content-Length: 0
Content-Type: text/html
Connection: close
这也有效(没有内容长度)
HEAD / HTTP/1.1
Host: MY_HOST
Content-Type: text/html
Connection: close
我怎样才能实现呢?
解决方法:
我发现有一个名为HeadersMore的Nginx模块允许修改输入标头(以及更多).
特别是more_clear_input_headers允许删除输入头,more_set_input_headers允许修改输入头.
就我而言
more_clear_input_headers "Content-Length";
要么
more_set_input_headers "Content-Length: 0";