การเปิดตัว nginx 1.19.7, njs 0.5.1 และหน่วย NGINX 1.22.0

สาขาหลักของ nginx 1.19.7 เปิดตัวแล้วซึ่งการพัฒนาคุณสมบัติใหม่ยังคงดำเนินต่อไป (ในสาขาเสถียรที่รองรับ 1.18 แบบขนานมีเพียงการเปลี่ยนแปลงที่เกี่ยวข้องกับการกำจัดข้อผิดพลาดร้ายแรงและช่องโหว่เท่านั้น)

การเปลี่ยนแปลงที่สำคัญ:

  • เมื่อกระบวนการของผู้ปฏิบัติงานไม่มีการเชื่อมต่อฟรี ตอนนี้ nginx จะปิดไม่เพียงแต่การเชื่อมต่อแบบ Keepalive เท่านั้น แต่ยังรวมถึงการเชื่อมต่อที่รอให้ซ็อกเก็ตปิด (“ปิดค้าง”)
  • รหัสประมวลผลการเชื่อมต่อใน 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 ในการประมวลผลคำขอโดยใช้สคริปต์ในการกำหนดค่า สามารถใช้สคริปต์ในไฟล์การกำหนดค่าเพื่อกำหนดตรรกะขั้นสูงสำหรับการประมวลผลคำขอ การสร้างการกำหนดค่า การสร้างการตอบสนองแบบไดนามิก การแก้ไขคำขอ/การตอบสนอง หรือการสร้าง stub อย่างรวดเร็วเพื่อแก้ไขปัญหาในเว็บแอปพลิเคชัน

เวอร์ชันใหม่เพิ่มคำสั่ง "js_header_filter" ซึ่งช่วยให้คุณตั้งค่าฟังก์ชัน JavaScript สำหรับการกรองและการเปลี่ยนแปลงส่วนหัวการตอบสนองตามอำเภอใจ: js_import foo.js; ตำแหน่ง / { js_header_filter foo.filter; พร็อกซี_พาส http://127.0.0.1:8081/; } foo.js: ฟังก์ชั่น filter(r) { var Cookies = r.headersOut['Set-Cookie']; วาร์ เลน = r.args.len ? หมายเลข(r.args.len) : 0; r.headersOut['Set-Cookie'] = Cookies.filter(v=>v.length > len); } ค่าเริ่มต้นการส่งออก {ตัวกรอง};

นอกจากนี้ ยังมีเมธอด ngx.fetch() ซึ่งใช้ Fetch API ซึ่งมีฟังก์ชันการทำงานของไคลเอ็นต์ HTTP วิธีการนี้รองรับการประมวลผลตัวเลือกเนื้อหา ส่วนหัว ขนาดบัฟเฟอร์ และขนาดสูงสุด_response_body_size ออบเจ็กต์การตอบสนองที่ส่งคืนรองรับ arrayBuffer(), bodyUsed, json(), ส่วนหัว, ตกลง, เปลี่ยนเส้นทาง, สถานะ, statusText, ข้อความ () วิธีการพิมพ์และ url และวัตถุส่วนหัวรองรับ 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 สามารถรันแอพพลิเคชั่นหลายตัวพร้อมกันในภาษาการเขียนโปรแกรมที่แตกต่างกัน โดยพารามิเตอร์การเปิดตัวสามารถเปลี่ยนแปลงได้แบบไดนามิกโดยไม่จำเป็นต้องแก้ไขไฟล์การกำหนดค่าและรีสตาร์ท รหัสนี้เขียนด้วยภาษา C และเผยแพร่ภายใต้ลิขสิทธิ์ Apache 2.0

หน่วย NGINX รุ่นใหม่มุ่งเน้นไปที่การปรับปรุงเสถียรภาพ การขยายเครื่องมือทดสอบ และการแก้ไขข้อบกพร่อง ในแพ็คเกจที่สร้างขึ้นสำหรับ Linux ผู้ใช้และกลุ่มที่ใช้งานหน่วย NGINX มีการเปลี่ยนแปลง แทนที่จะเป็น none:nobody ขณะนี้กระบวนการทำงานภายใต้หน่วยผู้ใช้แต่ละหน่วยในหน่วยกลุ่ม รับประกันความเข้ากันได้กับ Stream API ของวัตถุ ServerRequest และ ServerResponse จากโมดูล Node.js ตัวเลือก "เส้นทาง" สำหรับแอปพลิเคชัน Python อนุญาตให้ระบุหลายไดเรกทอรีได้

ที่มา: opennet.ru

เพิ่มความคิดเห็น