Выпуск nginx 1.19.7, njs 0.5.1 ΠΈ NGINX Unit 1.22.0

Π‘Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ выпуск основной Π²Π΅Ρ‚ΠΊΠΈ nginx 1.19.7, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ продолТаСтся Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… возмоТностСй (Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ 1.18 вносятся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ измСнСния, связанныС с устранСниСм ΡΠ΅Ρ€ΡŒΡ‘Π·Π½Ρ‹Ρ… ошибок ΠΈ уязвимостСй).

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ измСнСния:

  • ΠŸΡ€ΠΈ исчСрпании Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ процСссом свободных соСдинСний, nginx Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ keepalive-соСдинСния, Π½ΠΎ ΠΈ соСдинСния Π² состоянии оТидания закрытия сокСта («lingering close»).
  • Код ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ соСдинСний Π² 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 ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ запросов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ скриптов Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ„Π°ΠΉΠ»Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ для опрСдСлСния Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запросов, формирования ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, динамичСской Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π°, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ запроса/ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΈΠ»ΠΈ быстрого создания Π·Π°Π³Π»ΡƒΡˆΠ΅ΠΊ с Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π² web-прилоТСниях.

Π’ Π½ΠΎΠ²ΠΎΠΉ вСрсии Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° «js_header_filter», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π·Π°Π΄Π°Ρ‚ΡŒ JavaScript-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΈ измСнСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΎΡ‚Π²Π΅Ρ‚Π°: 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(), Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ API Fetch, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ 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, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для обСспСчСния запуска web-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… языках программирования (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js ΠΈ Java). Под ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ NGINX Unit ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ нСсколько ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… языках программирования, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ запуска ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ динамичСски Π±Π΅Π· нСобходимости ΠΏΡ€Π°Π²ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ пСрСзапуска. Код написан Π½Π° языкС Π‘ΠΈ ΠΈ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ Apache 2.0.

Π’ Π½ΠΎΠ²ΠΎΠΌ выпускС NGINX Unit основноС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ ΡƒΠ΄Π΅Π»Π΅Π½ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡŽ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡŽ срСдств для тСстирования ΠΈ ΠΈΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ошибок. Π’ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… для Linux ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΈ Π³Ρ€ΡƒΠΏΠΏΠ°, ΠΏΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ запускаСтся NGINX Unit. ВмСсто nobody:nobody процСссы Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ΄ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ unit Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ unit. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½Π° ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с API Stream ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ServerRequest ΠΈ ServerResponse ΠΈΠ· модуля Node.js. Π’ ΠΎΠΏΡ†ΠΈΠΈ «path» для Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ².

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