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" тохиргоог устгасан бөгөөд оронд нь "том_клиент_толгой_буфер"-ийг ашиглах хэрэгтэй.

Үүний зэрэгцээ nginx вэб серверт зориулсан JavaScript орчуулагч njs 0.5.1 гарсан. Njs орчуулагч нь ECMAScript стандартуудыг хэрэгжүүлдэг бөгөөд тохиргоонд байгаа скриптүүдийг ашиглан хүсэлтийг боловсруулах nginx чадварыг өргөжүүлэх боломжийг танд олгоно. Скриптийг тохиргооны файлд ашиглаж, хүсэлтийг боловсруулах, тохиргоог үүсгэх, хариу динамикаар үүсгэх, хүсэлт/хариултыг өөрчлөх, вэб програмын асуудлыг шийдвэрлэхийн тулд stub үүсгэх зэрэг дэвшилтэт логикийг тодорхойлох боломжтой.

Шинэ хувилбар нь "js_header_filter" удирдамжийг нэмсэн бөгөөд энэ нь танд дурын хариултын толгой хэсгийг шүүх, өөрчлөх JavaScript функцийг тохируулах боломжийг олгодог: js_import foo.js; байршил / {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 ? Тоо(r.args.len): 0; r.headersOut['Set-Cookie'] = cookies.filter(v=>v.length > len); } экспортын өгөгдмөл {шүүлтүүр};

Мөн HTTP клиент функцийг хангадаг Fetch API-г хэрэгжүүлдэг ngx.fetch() аргыг нэмсэн. Энэ арга нь их бие, толгой хэсэг, буферийн хэмжээ, хамгийн их_хариулах_биеийн_хэмжээний сонголтуудыг боловсруулахыг дэмждэг. Буцаагдсан Response объект нь arrayBuffer(), bodyUsed, json(), толгой, ok, redirect, status, statusText, text(), type болон url аргуудыг дэмждэг ба Header объект нь get(), getAll() болон has()-г дэмждэг. аргууд. функц fetch(r) { ngx.fetch('http://nginx.org/') .дараа нь(хариулах => хариулах.текст()) .дараа нь(бие => r.буцах(200, бие)) .catch (e => r.return(501, e.message)); }

Та мөн янз бүрийн програмчлалын хэлээр (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js болон Java) вэб програмуудыг ажиллуулах шийдлийг санал болгодог NGINX Unit 1.22 програмын серверийн хэвлэгдсэнийг тэмдэглэж болно. NGINX нэгж нь өөр өөр програмчлалын хэлээр олон програмыг нэгэн зэрэг ажиллуулах боломжтой бөгөөд тэдгээрийн эхлүүлэх параметрүүдийг тохиргооны файлуудыг засварлах, дахин эхлүүлэх шаардлагагүйгээр динамикаар өөрчлөх боломжтой. Код нь C хэл дээр бичигдсэн бөгөөд Apache 2.0 лицензийн дагуу түгээгддэг.

NGINX нэгжийн шинэ хувилбар нь тогтвортой байдлыг сайжруулах, туршилтын хэрэгслийг өргөжүүлэх, алдаа засахад чиглэв. Линуксэд зориулж үүсгэсэн багцуудад NGINX нэгжийг ажиллуулдаг хэрэглэгч болон бүлгийг өөрчилсөн. Хэн ч: хэн ч биш гэсний оронд процессууд одоо бүлгийн нэгж дэх хэрэглэгчийн тусдаа нэгжийн дор явагдана. Node.js модулийн ServerRequest болон ServerResponse объектуудын Stream API-тай нийцтэй байдлыг баталгаажуулсан. Python програмын "зам" сонголт нь олон санг зааж өгөх боломжийг олгодог.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх