ΠŸΡƒΡΠΊΠ°Π½Π΅ Π½Π° nginx 1.19.7, njs 0.5.1 ΠΈ NGINX Unit 1.22.0

ΠŸΡƒΡΠ½Π°Ρ‚ Π΅ основният ΠΊΠ»ΠΎΠ½ Π½Π° nginx 1.19.7, Π² ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π² ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ΠΈΡ стабилСн ΠΊΠ»ΠΎΠ½ 1.18 сС правят само ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° сСриозни Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΈ уязвимости).

Основни ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ:

  • ΠšΠΎΠ³Π°Ρ‚ΠΎ работният процСс ΠΈΠ·Ρ‡Π΅Ρ€ΠΏΠΈ свободнитС Π²Ρ€ΡŠΠ·ΠΊΠΈ, nginx сСга затваря Π½Π΅ само ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‰ΠΈΡ‚Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈ, Π½ΠΎ ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈΡ‚Π΅, Ρ‡Π°ΠΊΠ°Ρ‰ΠΈ затварянСто Π½Π° сокСта (β€žΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ Π·Π°Ρ‚Π²Π°Ρ€ΡΠ½Π΅β€œ).
  • ΠšΠΎΠ΄ΡŠΡ‚ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° Π² HTTP/2 Π΅ близък Π΄ΠΎ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° HTTP/1.x. ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π·Π° ΠΎΡ‚Π΄Π΅Π»Π½ΠΈΡ‚Π΅ настройки "http2_recv_timeout", "http2_idle_timeout" ΠΈ "http2_max_requests" Π΅ прСустановСна Π² ΠΏΠΎΠ»Π·Π° Π½Π° ΠΎΠ±Ρ‰ΠΈΡ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΈ "keepalive_timeout" ΠΈ "keepalive_requests".
  • НастройкитС β€žhttp2_max_field_sizeβ€œ ΠΈ β€žhttp2_max_header_sizeβ€œ са ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ΠΈ ΠΈ вмСсто тях трябва Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° β€žlarge_client_header_buffersβ€œ.

Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ бСшС пуснат njs 0.5.1, JavaScript ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π·Π° ΡƒΠ΅Π± ΡΡŠΡ€Π²ΡŠΡ€Π° nginx. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΡŠΡ‚ njs ΠΏΡ€ΠΈΠ»Π°Π³Π° стандартитС Π½Π° ECMAScript ΠΈ Π²ΠΈ позволява Π΄Π° Ρ€Π°Π·ΡˆΠΈΡ€ΠΈΡ‚Π΅ способността Π½Π° nginx Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° заявки с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° скриптовС Π² конфигурацията. Π‘ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ²Π΅Ρ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅Π½ Ρ„Π°ΠΉΠ» Π·Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° заявки, Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° конфигурация, Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π΅ Π½Π° заявка/ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ ΠΈΠ»ΠΈ Π±ΡŠΡ€Π·ΠΎ създаванС Π½Π° ΠΌΡŠΠ½ΠΈΡ‡Π΅Ρ‚Π° Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π² ΡƒΠ΅Π± прилоТСнията.

Новата вСрсия добавя Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°Ρ‚Π° β€žjs_header_filterβ€œ, която Π²ΠΈ позволява Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ JavaScript функция Π·Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅ ΠΈ промяна Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ Π·Π°Π³Π»Π°Π²ΠΊΠΈ Π½Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€: js_import foo.js; мСстополоТСниС / {js_header_filter foo.filter; proxy_pass http://127.0.0.1:8081/; } foo.js: функция filter(r) { var cookies = r.headersOut['Set-Cookie']; var len = r.args.len? Число (r.args.len) : 0; r.headersOut['Set-Cookie'] = cookies.filter(v=>v.length > len); } СкспортиранС ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ {Ρ„ΠΈΠ»Ρ‚ΡŠΡ€};

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ 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() ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ. функция 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 Unit сС фокусира Π²ΡŠΡ€Ρ…Ρƒ подобряванС Π½Π° стабилността, Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ²Π°Π½Π΅ Π½Π° инструмСнтитС Π·Π° тСстванС ΠΈ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π½Π΅ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ. Π’ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ‚Π΅, Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½ΠΈ Π·Π° Linux, потрСбитСлят ΠΈ Π³Ρ€ΡƒΠΏΠ°Ρ‚Π°, ΠΏΠΎΠ΄ ΠΊΠΎΠΈΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ NGINX Unit, са ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΈ. ВмСсто Π½ΠΈΠΊΠΎΠΉ:Π½ΠΈΠΊΠΎΠΉ, процСситС Π²Π΅Ρ‡Π΅ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ ΠΏΠΎΠ΄ отдСлния потрСбитСлски ΠΌΠΎΠ΄ΡƒΠ» Π² груповия ΠΌΠΎΠ΄ΡƒΠ». ΠžΡΠΈΠ³ΡƒΡ€Π΅Π½Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ с Stream API Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ ServerRequest ΠΈ ServerResponse ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»Π° Node.js. ΠžΠΏΡ†ΠΈΡΡ‚Π° "path" Π·Π° прилоТСния Π½Π° Python позволява Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ посочСни мноТСство Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€