[Nginx] ಪ್ರತಿಕ್ರಿಯೆ_ಸ್ಥಿತಿ = 0 ಅನ್ನು ಹೇಗೆ ಸೋಲಿಸುವುದು

"ಸೈಡ್ನೋಟ್ಸ್" ವರ್ಗದಿಂದ ಲೇಖನ.

ಟಿಎಲ್: ಡಿಆರ್:

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 ಮೂಲಕ ಕೆಲಸ ಮಾಡಲು ಸಂಪೂರ್ಣವಾಗಿ ನಿರಾಕರಿಸುತ್ತವೆ, ಅದ್ಭುತವಾದವುಗಳನ್ನು ಉತ್ಪಾದಿಸುತ್ತದೆ: host example.com ಗೆ ಸಂಪರ್ಕ #0 ಹಾಗೇ ಉಳಿದಿದೆ
ಸುರುಳಿ: (52) ಸರ್ವರ್‌ನಿಂದ ಖಾಲಿ ಉತ್ತರ

ಲಾಗ್‌ಗಳಲ್ಲಿ, ನಾವು ಈ ವಿಷಯವನ್ನು ಐಪಿ ಮೂಲಕ ಮಾತ್ರ ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ಸಾಧ್ಯವಾಯಿತು - ಯಾವುದೇ ವಿನಂತಿ ಅಥವಾ ಯಾವುದೇ ಇತರ ಡೇಟಾ ಇಲ್ಲ, ಮೇಲಿನ ಉದಾಹರಣೆಯಿಂದ ನೋಡಬಹುದಾಗಿದೆ. ಕುಖ್ಯಾತ ಸ್ಥಿತಿ ಮಾತ್ರ 0 ಆಗಿದೆ, ಆದರೆ ನಾನು ವಿನಂತಿಯನ್ನು ಅಡ್ಡಿಪಡಿಸಲಿಲ್ಲ ಎಂದು ನನಗೆ ತಿಳಿದಿದೆ! ಏನು ತಪ್ಪಾಗಬಹುದು ಎಂದು ನಾನು ಲೆಕ್ಕಾಚಾರ ಮಾಡಲು ಪ್ರಾರಂಭಿಸಿದೆ. ಮತ್ತು ಎಲ್ಲವೂ ತುಂಬಾ ಸರಳವಾಗಿದೆ:

ಆಲಿಸಿ 443 ಎಸ್‌ಎಸ್‌ಎಲ್ 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

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ