Changes with nginx 1.21.1 06 Jul 2021
*) Change: now nginx always returns an error for the CONNECT method.
—
http://hg.nginx.org/nginx
http://hg.nginx.org/nginx/rev/63c66b7cc07c
在请求头解析时,对CONNECT请求给予明确拒绝,即返回405 Not Allowed。有几点
理由:
1,nginx不是一个正向代理,因此没太大必要支持CONNECT。
2,nginx目前不支持RFC 7230针对CONNECT的消息长度规则,所以直接拒绝CONNECT
请求避免潜在错误。
–
在之前的版本,对nginx发起CONNECT请求也可能会收到405 Not Allowed错误,比如
如果只配置了静态页面,那么ngx_http_static_handler函数会返回405。
$ curl -X "CONNECT" 127.0.0.1:8080 <html> <head><title>405 Not Allowed</title></head> <body> <center> <h1>405 Not Allowed</h1> </center> <hr> <center>nginx/1.20.1</center> </body> </html>
*) Change: now nginx always returns an error if both “Content-Length”
and “Transfer-Encoding” header lines are present in the request.
—
http://hg.nginx.org/nginx/rev/bea0f9e5c309
在RFC2068里新引入了Transfer-Encoding头来表示消息长度,为了兼容之前的
HTTP1.0,之前的表示消息长度的Content-Length头肯定还是得有,但既然有两
个表示消息长度的头,所以就有一些应用规则,这在RFC文档里有描述:
https://www.ietf.org/rfc/rfc2068.txt
在4.4 Message Length有相关描述,也可以看这里:
https://blog.csdn.net/u013620635/article/details/100622909
应用规则有些绕,而且在实际生产中也基本不会有这两个头同时存在的情况,除
非是在攻击请求中,因此在nginx的这次更新里,就直接简单明确的禁止即可。
*) Change: now nginx always returns an error if spaces or control
characters are used in the request line.
*) Change: now nginx always returns an error if spaces or control
characters are used in a header name.
*) Change: now nginx always returns an error if spaces or control
characters are used in the “Host” request header line.
—
http://hg.nginx.org/nginx/rev/e0fdd75871e4
http://hg.nginx.org/nginx/rev/41f4bd4c51f1
http://hg.nginx.org/nginx/rev/b4073527be81
http://hg.nginx.org/nginx/rev/52338ddf9e2f
禁止在请求行(包括URI,header names,Host header)里使用空白字符或控制字符。
1,之前在URI里允许空白字符是为了兼容一些陈旧或错误的客户端,实际来看害处大
于益处。
2,更新后的版本,URI里的空白字符或控制字符必须进行编码才行。
总体来说,这几个改动,主要是为了更安全,而且也没有明显的副作用。
*) Change: optimization of configuration testing when using many
listening sockets.
—
http://hg.nginx.org/nginx/rev/c860f0b7010c
http://hg.nginx.org/nginx/rev/46815874bcc6
https://trac.nginx.org/nginx/ticket/2187
https://trac.nginx.org/nginx/ticket/2188
两个加速配置测试的优化改进,比如不创建监听套接字等。
*) Bugfix: nginx did not escape “””, “<“, “>”, “”, “^”, “`”, “{“, “|”,
and “}” characters when proxying with changed URI.
—
http://hg.nginx.org/nginx/rev/dfd8dfb436e5
https://trac.nginx.org/nginx/ticket/2191
https://www.cnblogs.com/panchanggui/p/9436348.html
严格按照RFC3986规范对URI里的字符进行编码。比如,在之前版本就没有对”>”进行编
码,就导致MS Exchange应用出错。
*) Bugfix: SSL variables might be empty when used in logs; the bug had
appeared in 1.19.5.
—
http://hg.nginx.org/nginx/rev/5f765427c17a
http://mailman.nginx.org/pipermail/nginx/2021-May/060670.html
对于lingering_close的套接字,其相关ssl变量也需延迟释放,否则可能导致某些日志
无法正常获取到对应的ssl变量值。
*) Bugfix: keepalive connections with gRPC backends might not be closed
after receiving a GOAWAY frame.
—
http://hg.nginx.org/nginx/rev/021416fca094
gRPC中的GOAWAY帧表示要关闭一个连接。再之前版本,nginx收到该帧后,仍然可以对
当前连接保持keepalive状态,即允许该连接上有新流过来。但事实上,应该做限制,
即关闭keepalive状态。
本次修改增加了一个是否收到GOAWAY帧的标记,然后判断该标记对是否要保持keepalive
做处理。
*) Bugfix: reduced memory consumption for long-lived requests when
proxying with more than 64 buffers.
—
http://hg.nginx.org/nginx/rev/7f5e3595caff
http://hg.nginx.org/nginx/rev/ecf2a9002b37
https://trac.nginx.org/nginx/ticket/1408
特定场景:超大文件下载,https://github.com/owncloud/core/issues/29328
解决了一个特定场景下的“内存泄漏”Bug,也不算真正的内存泄漏,就是这部分内存的
释放在connection关闭时才进行,因此在特定场景下,如果这部分内存特别大,就会有
较明显的负面影响了。
网友评论已有0条评论, 我也要评论