nginx 1.19.7 рдХреА рдореБрдЦреНрдп рд╢рд╛рдЦрд╛ рдЬрд╛рд░реА рдХреА рдЧрдИ рд╣реИ, рдЬрд┐рд╕рдХреЗ рднреАрддрд░ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдЬрд╛рд░реА рд╣реИ (рд╕рдорд╛рдирд╛рдВрддрд░ рд╕рдорд░реНрдерд┐рдд рд╕реНрдерд┐рд░ рд╢рд╛рдЦрд╛ 1.18 рдореЗрдВ, рдХреЗрд╡рд▓ рдЧрдВрднреАрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рдЙрдиреНрдореВрд▓рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рдЧрдП рд╣реИрдВ)ред
рдореБрдЦреНрдп рдкрд░рд┐рд╡рд░реНрддрди:
- рдЬрдм рдХрд┐рд╕реА рд╡рд░реНрдХрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдореБрдХреНрдд рдХрдиреЗрдХреНрд╢рди рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ nginx рдЕрдм рди рдХреЗрд╡рд▓ keepalive рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ lingering close рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рднреА рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред
- 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. njs рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ ECMAScript рдорд╛рдирдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ nginx рдХреА рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрдиреНрдирдд рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рддрд░реНрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ, рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ, рдЕрдиреБрд░реЛрдз/рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдпрд╛ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рд╕реНрдЯрдмреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг "js_header_filter" рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдордирдорд╛рдиреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реЗрдбрд░ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рдВрдХреНрд╢рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: js_import foo.js; location / { js_header_filter foo.filter; proxy_pass http://127.0.0.1:8081/; } foo.js: function filter(r) { var cookies = r.headersOut['Set-Cookie']; var len = r.args.len ? Number(r.args.len) : 0; r.headersOut['Set-Cookie'] = cookies.filter(v=>v.length > len); } export default {filter};
ngx.fetch() рд╡рд┐рдзрд┐ рднреА рдЬреЛрдбрд╝реА рдЧрдИ рд╣реИ, рдЬреЛ Fetch API рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреА рд╣реИ, рдЬреЛ HTTP рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ body, headers, buffer_size рдФрд░ max_response_body_size рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИред рд▓реМрдЯрд╛рдИ рдЧрдИ Response рдСрдмреНрдЬреЗрдХреНрдЯ arrayBuffer(), bodyUsed, json(), headers, ok, redirect, status, statusText, text(), type, рдФрд░ url рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ, рдФрд░ Header рдСрдмреНрдЬреЗрдХреНрдЯ get(), getAll(), рдФрд░ has() рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред function fetch(r) { ngx.fetch('http://nginx.org/') .then(reply => reply.text()) .then(body => r.return(200, body)) .catch(e => r.return(501, e.message)); }
рдЖрдк рдкреНрд░рдХрд╛рд╢рди рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд░реНрд╡рд░ NGINX Unit 1.22 рдПрдХ рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js рдФрд░ Java) рдореЗрдВ рд▓рд┐рдЦреЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред NGINX Unit рдПрдХ рд╕рд╛рде рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд▓рд┐рдЦреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдпрд╛ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдЙрдирдХреЗ рд▓реЙрдиреНрдЪ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдХреЛрдб C рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ Apache 2.0 рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рд▓рд╛рдЗрд╕реЗрдВрд╕ рдкреНрд░рд╛рдкреНрдд рд╣реИред
NGINX рдпреВрдирд┐рдЯ рдХреЗ рдирдП рд░рд┐рд▓реАрдЬ рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рд╕реНрдерд┐рд░рддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛, рдкрд░реАрдХреНрд╖рдг рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдФрд░ рдмрдЧреНрд╕ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдерд╛ред Linux рдкреИрдХреЗрдЬ рдореЗрдВ NGINX рдпреВрдирд┐рдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рд╕рдореВрд╣ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред nobody:nobody рдХреЗ рдмрдЬрд╛рдп, рдЕрдм рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдпреВрдирд┐рдЯ рд╕рдореВрд╣ рдореЗрдВ unit рдирд╛рдордХ рдПрдХ рдЕрд▓рдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЪрд▓рддреА рд╣реИрдВред Node.js рдореЙрдбреНрдпреВрд▓ рд╕реЗ ServerRequest рдФрд░ ServerResponse рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдо API рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХреА рдЧрдИ рд╣реИред Python рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП "path" рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рдЕрдм рдХрдИ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдБ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред
рд╕реНрд░реЛрдд: opennet.ru
