[Nginx] ምላሽ_ሁኔታ = 0ን እንዴት ማሸነፍ እንደሚቻል

ከ “sidenotes” ምድብ የመጣ ጽሑፍ።

TL: DR:

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

ከፕሮጀክቶቹ በአንዱ ላይ የጀርባውን አንዳንድ ውስጣዊ አመክንዮ ከቀየርኩ በኋላ በምዝግብ ማስታወሻዎች ውስጥ አንድ እንግዳ ምላሽ_ኮድ ማየት ጀመርኩ ፣ ማለትም 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 በኩል ለመስራት እምቢ ይላሉ፣ አስደናቂውን ነገር ያመጣሉ፡ ግንኙነት #0 ለማስተናገድ example.com ሳይበላሽ ቀርቷል።
curl: (52) ባዶ መልስ ከአገልጋይ

በምዝግብ ማስታወሻዎች ውስጥ, ይህንን ነገር በአይፒ ብቻ መከታተል ችለናል - ምንም ጥያቄ ወይም ሌላ ውሂብ አልነበረም, ከላይ ካለው ምሳሌ እንደሚታየው. በጣም ታዋቂው ደረጃ 0 ብቻ ነው ፣ ግን ጥያቄውን እንዳላቋረጥኩት አውቃለሁ! ምን ሊሳሳት እንደሚችል ማወቅ ጀመርኩ። እና ሁሉም ነገር በጣም ቀላል ሆነ-

አዳምጥ 443 ኤስኤስኤል http2 backlog=8192;

ደህና፣ http2ን ለ ssl ግንኙነቶች ከተጠቀሙ የጥያቄ ማቋረጫውን ማዋቀር ብቻ በቂ አይደለም፣ እነሱም በ ngx_http_v2_module ውስጥ መዋቀር አለባቸው፣ ማለትም፡-

Синтаксис:	http2_max_field_size размер;
Умолчание:	http2_max_field_size 4k;
Контекст:	http, server

በHPACK በመጠቀም የተጨመቀውን የጥያቄ ራስጌ ከፍተኛ መጠን ይገድባል። እገዳው በሁለቱም ስም እና ዋጋ ላይ እኩል ነው. ሃፍማን ኢንኮዲንግ ጥቅም ላይ ከዋለ፣ ያልታሸገው ስም እና የእሴት ሕብረቁምፊ ትክክለኛው መጠን ትልቅ ሊሆን ይችላል። ነባሪው ገደቡ ለአብዛኛዎቹ መጠይቆች ተስማሚ ነው።

በአጠቃላይ ይህ ነው. እና ለምን ሁሉም? የአገናኙ ርዝመት ረጅም ስለነበረ - ከእነዚያ ተመሳሳይ 4 ኪ.

በማዘጋጀት, ለምሳሌ, 8kb (ወይም በቂ ሊሆን የሚችለውን ያህል), ችግሩን እንፈታዋለን.
ስለዚህ ይሄዳል.

ምንጭ: hab.com

አስተያየት ያክሉ