Nginx 与 Chrome:400 错误请求(spdy 标头块过早结束)

Nginx 与 Chrome:400 错误请求(spdy 标头块过早结束)

我发现,服务器日志中可能有很多 HTTP 400 错误请求,这些请求来自使用 Chrome 浏览器的客户端,并且间隔时间较短,类似于 DOS。(每秒 40-50 个请求)

[16/Oct/2015:12:57:02 +0200] "-" 400 0 "-" "-"

在 Nginx 中启用信息日志记录:

client sent SYN_STREAM frame for stream 7 with invalid header block
while processing SPDY, client: xx.xx.xx.xx, server: 0.0.0.0:443

调试模式日志记录:

http uri: "/"
http args: ""
http exten: ""
premature end of spdy header block
spdy send RST_STREAM sid:51 st:1
spdy close stream 51, queued 0, processing 1
http close request
http log handler
http pinba handler
free: 000000000219B010, unused: 282
free: 000000000203A2D0, unused: 2080
spdy frame complete pos:0000000001B30CC0 end:0000000001B31396
process spdy frame head:80030001 f:1 l:430
spdy SYN_STREAM frame sid:53 prio:4
posix_memalign: 000000000219B010:4096 @16
posix_memalign: 000000000203A2D0:4096 @16
process spdy header block 420 of 420
spdy inflate out: ni:0000000001B30E76 no:000000000203A5EE ai:0 ao:257 rc:0
spdy header block has 11 entries

禁用 spdy 即可解决问题。

我使用 Nginx 作为反向缓存代理。后端也使用 Nginx 和 php-fpm。

我使用的是 Debian jessie 的 Nginx 版本:1.8.0-1~dotdeb+8.2

Jessie-backports 版本 1.9.4-1~bpo8+1 给出了相同的结果。

该问题仅出现在一小部分使用 Google Chrome 版本 46.0.2490.71 和 45.0.2454.101 的客户端上

相关内容