[Nginx] Как ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚ΡŒ response_status = 0

Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΈΠ· разряда Β«Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ Π½Π° полях».

TL:DR:

http2_max_field_size 8k; # всСх спасСт!

На ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², послС измСнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ Π±Π΅ΠΊΠ΅Π½Π΄Π°, Π½Π°Ρ‡Π°Π» Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ странный response_code Π² Π»ΠΎΠ³Π°Ρ…, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ β€” 0. Π’ Π»ΠΎΠ³Π°Ρ… выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

{
  "timestamp": "2020-01-17T08:41:51+00:00",
  "remote_addr": "zzz.zzz.zzz.zzz",
  "request_time": 0,
  "upstream_response_time": "",
  "upstream_header_time": "",
  "http_accept_language": "-language",
  "response_status": 0,
  "request": "",
  "host": "example.com",
  "upstream_addr": "",
  "http_referrer": "",
  "request_length": 5854,
  "bytes_sent": 0,
  "http_user_agent": ""
}


Π§Ρ‚Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ Π³ΡƒΠ³Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΡƒΡŽ Ρ‚Π΅ΠΌΡƒ Π΄Π°Π»ΠΎ Ρ€ΠΎΠ²Π½Ρ‹ΠΌ счСтом Π½ΠΈΡ‡Π΅Π³ΠΎ β€” Ρ‚.ΠΊ. утвСрТдаСтся, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π·Π°ΠΊΡ€Ρ‹Π» соСдинСниС Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ. Ну ΠΈ разная экзотика с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π±ΡƒΡ„Ρ„Π΅Ρ€Π° для wsgi_, Ρ‡Ρ‚ΠΎ Π² нашСм случаС Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΠ»ΠΎ ΠΎΡ‚ слова Β«Π½ΠΈΠΊΠ°ΠΊΒ».

Π’ Ρ†Π΅Π»ΠΎΠΌ, Ρ€Π΅ΡˆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€” Π½Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π° Π½Π°ΡˆΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΌΠ°Ρ… ΠΎΠ½ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ.

Π ΠΎΠ²Π½ΠΎ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΏΠΎΠΊΠ° мСня Π½Π΅ ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈΠ»ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ: Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ссылки Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ http, Π½ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎ https, выдавая чудСсноС: Connection #0 to host example.com left intact
curl: (52) Empty reply from server

Π’ Π»ΠΎΠ³Π°Ρ… ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ эту ΡˆΡ‚ΡƒΠΊΡƒ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ IP β€” Π½ΠΈ рСквСста, Π½ΠΈ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²Ρ‹ΡˆΠ΅ β€” Π½Π΅Ρ‚. Волько прСсловутый статус 0, Π½ΠΎ я-Ρ‚ΠΎ знаю, Ρ‡Ρ‚ΠΎ запрос я Π½Π΅ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π»! Начал ΠΊΠΎΠ²Ρ‹Ρ€ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΉΡ‚ΠΈ Π½Π΅ Ρ‚Π°ΠΊ. А всС оказалось ΠΎΡ‡Π΅Π½ΡŒ просто:

listen 443 ssl http2 backlog=8192;

Ну Ρ‚Π°ΠΊ Π²ΠΎΡ‚ β€” Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ http2 для ssl-соСдинСний, Ρ‚ΠΎ нСдостаточно просто ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΡΡ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€Ρ‹ запроса, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΡΡ‚ΡŒ ΠΈΡ… Π½Π°Π΄ΠΎ ΠΈ Π² ngx_http_v2_module, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:

Бинтаксис:	http2_max_field_size Ρ€Π°Π·ΠΌΠ΅Ρ€;
Π£ΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΠ΅:	http2_max_field_size 4k;
ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚:	http, server

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° запроса, сТатого ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ HPACK. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ примСняСтся Π² Ρ€Π°Π²Π½ΠΎΠΉ стСпСни ΠΊΠ°ΠΊ ΠΊ ΠΈΠΌΠ΅Π½ΠΈ, Ρ‚Π°ΠΊ ΠΈ ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ. Если примСняСтся ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, Ρ‚ΠΎ фактичСский Ρ€Π°Π·ΠΌΠ΅Ρ€ распакованных строк ΠΈΠΌΠ΅Π½ΠΈ ΠΈ значСния ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ большС. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° запросов.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, это ΠΎΠ½ΠΎ. А всС ΠΏΠΎΡ‡Π΅ΠΌΡƒ? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΄Π»ΠΈΠ½Π° ссылки Π±Ρ‹Π»Π° большой β€” большС, Ρ‡Π΅ΠΌ Ρ‚Π΅ самыС 4k.

Выставив Π΅Π³ΠΎ Π², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 8kb (ΠΈΠ»ΠΈ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ, сколько навСрняка Ρ…Π²Π°Ρ‚ΠΈΡ‚) β€” Ρ€Π΅ΡˆΠ°Π΅ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.
Π’Π°ΠΊΠΈΠ΅ Π΄Π΅Π»Π°.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com