Назад | Перейти на главную страницу

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.

Я использую версию Nginx из Debian jessie: 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.