[Nginx] ప్రతిస్పందన_స్థితిని ఎలా ఓడించాలి = 0

"సైడ్‌నోట్స్" వర్గం నుండి ఒక కథనం.

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 ద్వారా పని చేయడానికి పూర్తిగా నిరాకరిస్తుంది, అద్భుతమైనది: హోస్ట్ example.comకి కనెక్షన్ #0 అలాగే ఉంచబడింది
కర్ల్: (52) సర్వర్ నుండి ఖాళీ ప్రత్యుత్తరం

లాగ్‌లలో, మేము ఈ విషయాన్ని IP ద్వారా మాత్రమే ట్రాక్ చేయగలిగాము - పై ఉదాహరణ నుండి చూడగలిగే విధంగా అభ్యర్థన లేదా ఇతర డేటా లేదు. అపఖ్యాతి పాలైన స్థితి మాత్రమే 0, కానీ నేను అభ్యర్థనకు అంతరాయం కలిగించలేదని నాకు తెలుసు! నేను తప్పు జరగవచ్చని గుర్తించడం ప్రారంభించాను. మరియు ప్రతిదీ చాలా సులభం అని తేలింది:

వినండి 443 ssl http2 బ్యాక్‌లాగ్=8192;

సరే, మీరు ssl కనెక్షన్‌ల కోసం http2ని ఉపయోగిస్తే, అభ్యర్థన బఫర్‌లను కాన్ఫిగర్ చేయడం మాత్రమే సరిపోదు, అవి తప్పనిసరిగా ngx_http_v2_moduleలో కాన్ఫిగర్ చేయబడాలి, అవి:

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

HPACKని ఉపయోగించి కంప్రెస్ చేయబడిన అభ్యర్థన హెడర్ గరిష్ట పరిమాణాన్ని పరిమితం చేస్తుంది. పరిమితి పేరు మరియు విలువ రెండింటికీ సమానంగా వర్తిస్తుంది. హఫ్ఫ్‌మన్ ఎన్‌కోడింగ్ ఉపయోగించినట్లయితే, ప్యాక్ చేయని పేరు మరియు విలువ స్ట్రింగ్‌ల వాస్తవ పరిమాణం పెద్దదిగా ఉండవచ్చు. డిఫాల్ట్ పరిమితి చాలా ప్రశ్నలకు అనుకూలంగా ఉంటుంది.

సాధారణంగా, ఇది. మరియు ఎందుకు అన్ని? ఎందుకంటే లింక్ యొక్క పొడవు పొడవుగా ఉంది - అదే 4k కంటే ఎక్కువ.

ఉదాహరణకు, 8kb (లేదా సరిపోయేంత ఎక్కువ)కి సెట్ చేయడం ద్వారా మేము సమస్యను పరిష్కరిస్తాము.
కాబట్టి అది వెళ్తుంది.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి