Erthygl o'r categori βsidenotesβ.
TL: DR:
http2_max_field_size 8k; # Π²ΡΠ΅Ρ
ΡΠΏΠ°ΡΠ΅Ρ!
Ar un o'r prosiectau, ar Γ΄l newid rhywfaint o resymeg fewnol y backend, dechreuais arsylwi cod ymateb rhyfedd yn y logiau, sef 0. Yn y logiau mae'n edrych rhywbeth fel hyn:
{
"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": ""
}
Ni roddodd darllen y ddogfennaeth a googling ar y pwnc hwn ddim byd o gwbl - oherwydd ... Dywedir bod yr ymddygiad hwn yn digwydd pan gaeodd y cleient y cysylltiad heb basio'r penawdau. Wel, ac amryw o bethau egsotig gyda'r maint byffer ar gyfer wsgi_, nad oedd yn ein hachos ni yn cyd-fynd Γ’'r gair βmewn unrhyw fforddβ.
Yn gyffredinol, penderfynasom nad yw'r broblem yn broblem, gan ystyried y ffaith nad yw'n hollbwysig o gwbl yn ein cyfrolau.
Yn union nes i mi gael fy syfrdanu gan y broblem ganlynol: mewn rhai achosion, mae dolenni'n agor heb broblemau trwy http, ond yn gwrthod yn llwyr weithio trwy https, gan gynhyrchu'r gwych: Cysylltiad #0 i westeiwr example.com wedi'i adael yn gyfan
curl: (52) Ateb gwag gan y gweinydd
Yn y logiau, dim ond trwy IP yr oeddem yn gallu olrhain y peth hwn - nid oedd unrhyw gais nac unrhyw ddata arall, fel y gwelir o'r enghraifft uchod. Dim ond y statws drwg-enwog yw 0, ond gwn na wnes i dorri ar draws y cais! Dechreuais ddarganfod beth allai fynd o'i le. Ac fe drodd popeth yn syml iawn:
gwrandewch 443 ssl http2 Γ΄l-groniad=8192;
Wel, os ydych chi'n defnyddio http2 ar gyfer cysylltiadau ssl, yna nid yw'n ddigon dim ond i ffurfweddu'r byfferau cais, rhaid iddynt hefyd gael eu ffurfweddu yn ngx_http_v2_module, sef:
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ: http2_max_field_size ΡΠ°Π·ΠΌΠ΅Ρ;
Π£ΠΌΠΎΠ»ΡΠ°Π½ΠΈΠ΅: http2_max_field_size 4k;
ΠΠΎΠ½ΡΠ΅ΠΊΡΡ: http, server
Yn cyfyngu ar uchafswm maint pennawd cais wedi'i gywasgu gan ddefnyddio HPACK. Mae'r cyfyngiad yr un mor berthnasol i'r enw a'r gwerth. Os defnyddir amgodio Huffman, efallai y bydd maint gwirioneddol yr enw heb ei bacio a'r llinynnau gwerth yn fwy. Mae'r terfyn rhagosodedig yn addas ar gyfer y rhan fwyaf o ymholiadau.
Yn gyffredinol, dyma fe. A pham i gyd? Oherwydd bod hyd y ddolen yn hir - yn hirach na'r rhai yr un 4k.
Trwy ei osod i, er enghraifft, 8kb (neu gymaint ag sy'n debygol o fod yn ddigon), rydym yn datrys y broblem.
Felly mae'n mynd.
Ffynhonnell: hab.com