nginx 1.19.7, njs 0.5.1 рдФрд░ NGINX рдпреВрдирд┐рдЯ 1.22.0 рдХрд╛ рд╡рд┐рдореЛрдЪрди

nginx 1.19.7 рдХреА рдореБрдЦреНрдп рд╢рд╛рдЦрд╛ рдЬрд╛рд░реА рдХреА рдЧрдИ рд╣реИ, рдЬрд┐рд╕рдХреЗ рднреАрддрд░ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдЬрд╛рд░реА рд╣реИ (рд╕рдорд╛рдирд╛рдВрддрд░ рд╕рдорд░реНрдерд┐рдд рд╕реНрдерд┐рд░ рд╢рд╛рдЦрд╛ 1.18 рдореЗрдВ, рдХреЗрд╡рд▓ рдЧрдВрднреАрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рдЙрдиреНрдореВрд▓рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рдЧрдП рд╣реИрдВ)ред

рдореБрдЦреНрдп рдкрд░рд┐рд╡рд░реНрддрди:

  • рдЬрдм рдПрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдореБрдлреНрдд рдХрдиреЗрдХреНрд╢рди рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ nginx рдЕрдм рди рдХреЗрд╡рд▓ рдХреАрдкреЗрд▓рд╛рдЗрд╡ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕реЙрдХреЗрдЯ рдмрдВрдж рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рдХрдиреЗрдХреНрд╢рди ("рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдмрдВрдж") рдХреЛ рднреА рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред
  • HTTP/2 рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛрдб HTTP/1.x рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдХрд░реАрдм рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рдирд┐рд░реНрджреЗрд╢реЛрдВ "keepalive_timeout" рдФрд░ "keepalive_requests" рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ "http2_recv_timeout", "http2_idle_timeout" рдФрд░ "http2_max_requests" рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  • рд╕реЗрдЯрд┐рдВрдЧреНрд╕ "http2_max_field_size" рдФрд░ "http2_max_header_size" рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп "large_client_header_buffers" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЙрд╕реА рд╕рдордп, njs 0.5.1 рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЬреЛ nginx рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреБрднрд╛рд╖рд┐рдпрд╛ рдерд╛ред рдПрдирдЬреЗрдПрд╕ рджреБрднрд╛рд╖рд┐рдпрд╛ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд╛рдирдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП nginx рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ, рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ, рдЕрдиреБрд░реЛрдз/рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ, рдпрд╛ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреНрд╡рд░рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдЯрдмреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрдирдд рддрд░реНрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг "js_header_filter" рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реЗрдбрд░ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдФрд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рдВрдХреНрд╢рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: js_import foo.js; рд╕реНрдерд╛рди / { js_header_filter foo.filter; рдкреНрд░реЙрдХреНрд╕реА_рдкрд╛рд╕ http://127.0.0.1:8081/; } foo.js: рдлрд╝рдВрдХреНрд╢рди рдлрд╝рд┐рд▓реНрдЯрд░(рдЖрд░) { var рдХреБрдХреАрдЬрд╝ = r.headersOut['рд╕реЗрдЯ-рдХреБрдХреА']; var len = r.args.len ? рд╕рдВрдЦреНрдпрд╛(r.args.len) : 0; r.headersOut['рд╕реЗрдЯ-рдХреБрдХреА'] = рдХреБрдХреАрдЬрд╝.рдлрд╝рд┐рд▓реНрдЯрд░(v=>v.length > len); } рдирд┐рд░реНрдпрд╛рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ {рдлрд╝рд┐рд▓реНрдЯрд░};

ngx.fetch() рд╡рд┐рдзрд┐ рднреА рдЬреЛрдбрд╝реА рдЧрдИ рд╣реИ, рдЬреЛ Fetch API рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ, рдЬреЛ HTTP рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рдмреЙрдбреА, рд╣реЗрдбрд░, рдмрдлрд╝рд░_рд╕рд╛рдЗрдЬрд╝ рдФрд░ max_response_body_size рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИред рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рд░рд┐рд╕реНрдкрд╛рдВрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрд░реЗрдмрдлрд╝рд░ (), рдмреЙрдбреАрдпреВрдЬреНрдб, рдЬреЗрд╕рди (), рд╣реЗрдбрд░, рдУрдХреЗ, рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ, рд╕реНрдЯреЗрдЯрд╕, рд╕реНрдЯреЗрдЯрд╕рдЯреЗрдХреНрд╕реНрдЯ, рдЯреЗрдХреНрд╕реНрдЯ (), рдЯрд╛рдЗрдк рдФрд░ рдпреВрдЖрд░рдПрд▓ рддрд░реАрдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╣реЗрдбрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреЗрдЯ (), рдЧреЗрдЯ рдСрд▓ () рдФрд░ рд╣реИ () рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рддрд░реАрдХреЗ. рдлрд╝рдВрдХреНрд╢рди рдлрд╝реЗрдЪ(рдЖрд░) { ngx.fetch('http://nginx.org/') .then(рдЙрддреНрддрд░ => рдЙрддреНрддрд░.рдкрд╛рда()) .рддрдм(рдмреЙрдбреА => r.рд░рд┐рдЯрд░реНрди(200, рдмреЙрдбреА)) .рдХреИрдЪ (рдИ => рдЖрд░.рд░рд┐рдЯрд░реНрди(501, рдИ.рд╕рдВрджреЗрд╢)); }

рдЖрдк рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рдпреВрдирд┐рдЯ 1.22 рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рдХреЗ рдкреНрд░рдХрд╛рд╢рди рдХреЛ рднреА рдиреЛрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ (рдкрд╛рдпрдерди, рдкреАрдПрдЪрдкреА, рдкрд░реНрд▓, рд░реВрдмреА, рдЧреЛ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ/рдиреЛрдб.рдЬреЗрдПрд╕ рдФрд░ рдЬрд╛рд╡рд╛) рдореЗрдВ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рдпреВрдирд┐рдЯ рдПрдХ рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓реЙрдиреНрдЪ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдФрд░ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреЛрдб C рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ Apache 2.0 рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рдпреВрдирд┐рдЯ рдХреА рдирдИ рд░рд┐рд▓реАрдЬ рд╕реНрдерд┐рд░рддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░, рдкрд░реАрдХреНрд╖рдг рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдФрд░ рдмрдЧреНрд╕ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рд╕рдореВрд╣ рдЬрд┐рд╕рдХреЗ рддрд╣рдд рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рдпреВрдирд┐рдЯ рдЪрд▓рддреА рд╣реИ, рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреЛрдИ рдирд╣реАрдВ: рдХреЛрдИ рдирд╣реАрдВ рдХреЗ рдмрдЬрд╛рдп, рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдЕрдм рдЗрдХрд╛рдИ рд╕рдореВрд╣ рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдХрд╛рдИ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЪрд▓рддреА рд╣реИрдВред Node.js рдореЙрдбреНрдпреВрд▓ рд╕реЗ ServerRequest рдФрд░ ServerResponse рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕реНрдЯреНрд░реАрдо рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХреА рдЧрдИред рдкрд╛рдпрдерди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП "рдкрде" рд╡рд┐рдХрд▓реНрдк рдПрдХрд╛рдзрд┐рдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд╕реНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ