Nginx 1.26.0 เปิดตัวพร้อมรองรับ HTTP/3

หลังจากหนึ่งปีของการพัฒนา มีการเผยแพร่สาขาใหม่ที่เสถียรของเซิร์ฟเวอร์ HTTP ประสิทธิภาพสูงและพร็อกซีเซิร์ฟเวอร์หลายโปรโตคอล nginx 1.26.0 ซึ่งรวมการเปลี่ยนแปลงที่สะสมในสาขาหลัก 1.25.x ในอนาคต การเปลี่ยนแปลงทั้งหมดในสาขาเสถียร 1.26 จะเกี่ยวข้องกับการกำจัดข้อผิดพลาดร้ายแรงและช่องโหว่ ในไม่ช้าจะมีการสร้างสาขาหลักของ nginx 1.27 ซึ่งการพัฒนาคุณสมบัติใหม่จะดำเนินต่อไป สำหรับผู้ใช้ทั่วไปที่ไม่มีงานตรวจสอบความเข้ากันได้กับโมดูลของบุคคลที่สาม ขอแนะนำให้ใช้สาขาหลัก โดยพิจารณาจากการเปิดตัวผลิตภัณฑ์เชิงพาณิชย์ Nginx Plus ทุก ๆ สามเดือน

ตามรายงานเดือนมีนาคมจาก Netcraft มีเว็บไซต์ประมาณ 243 ล้านเว็บไซต์ที่ใช้งาน Nginx (289 ล้านปีที่แล้ว) Nginx ใช้กับ 18.15% ของไซต์ที่ใช้งานทั้งหมด (ปีที่แล้ว 18.94% สองปีที่แล้ว 20.08%) ซึ่งสอดคล้องกับอันดับที่สองในความนิยมในหมวดหมู่นี้ (ส่วนแบ่งของ Apache สอดคล้องกับ 20.09% (ปีที่แล้ว 20.52 สองปี) ที่แล้ว 22.58%), Cloudflare - 14.12% (11.32%, 10.42%), Google - 10.41% (9.89%, 8.89%) ในเวลาเดียวกันเมื่อพิจารณาไซต์ทั้งหมด nginx ยังคงความเป็นผู้นำและครอง 22.31% ของตลาด (หนึ่งปีที่แล้ว 25.94% สองปีที่แล้ว - 31.13%) ในขณะที่ส่วนแบ่งของ Apache สอดคล้องกับ 20.17% (20.58, 23.08%), Cloudflare - 11.24% (10.17, 5.49%), OpenResty (แพลตฟอร์มที่ใช้ nginx และ LuaJIT) - 7.93 % (7.94%, 8.01%).

ในบรรดาเว็บไซต์ที่มีผู้เข้าชมมากที่สุดในโลก ส่วนแบ่งของ nginx คือ 20.63% (ปีที่แล้ว 21.37% สองปีที่แล้ว 21.79%) Cloudflare - 22.59% (ปีที่แล้ว 21.62%) Apache httpd - 20.09% (21.18 %) ตามข้อมูลของ W3Techs พบว่า nginx ใช้กับไซต์ที่มีผู้เข้าชมมากที่สุด 34.3% ในเดือนเมษายนปีที่แล้ว ตัวเลขนี้อยู่ที่ 34.5% ของปีก่อน - 33.1% ส่วนแบ่งของ Apache ลดลงตลอดทั้งปีจาก 32.2% เป็น 30.1% และส่วนแบ่งของ Microsoft IIS ลดลงจาก 5.6% เป็น 4.8% ส่วนแบ่งของ Node.js เพิ่มขึ้นจาก 2.4% เป็น 3.2% และส่วนแบ่งของ LiteSpeed ​​จาก 11.8% เป็น 12.9%

การปรับปรุงที่โดดเด่นที่สุดที่เพิ่มเข้ามาในระหว่างการพัฒนาสาขาอัปสตรีม 1.25.x:

  • เพิ่มโมดูล ngx_http_v3 พร้อมการสนับสนุนการทดลองสำหรับโปรโตคอล HTTP/3 ในการสร้างโมดูล จะมีการจัดเตรียมตัวเลือก “--with-http_v3_module” HTTP/3 กำหนดการใช้โปรโตคอล QUIC (Quick UDP Internet Connections) เป็นการส่งข้อมูลสำหรับ HTTP/2 QUIC เป็นส่วนขยายของโปรโตคอล UDP ที่รองรับมัลติเพล็กซ์ของการเชื่อมต่อหลายรายการ และมีวิธีการเข้ารหัสที่เทียบเท่ากับ TLS/SSL โปรโตคอลนี้ถูกสร้างขึ้นในปี 2013 โดย Google เป็นทางเลือกแทนการรวม TCP+TLS สำหรับเว็บ แก้ไขปัญหาเกี่ยวกับการตั้งค่าการเชื่อมต่อที่ยาวนานและเวลาการเจรจาใน TCP และขจัดความล่าช้าเมื่อแพ็กเก็ตสูญหายระหว่างการถ่ายโอนข้อมูล
  • มีการเพิ่มคำสั่ง "http2" แยกต่างหากเพื่อเลือกเปิดใช้งานโปรโตคอล HTTP/2 ที่สัมพันธ์กับเซิร์ฟเวอร์ (สามารถใช้ในบล็อก "เซิร์ฟเวอร์" แยกต่างหาก) เลิกใช้พารามิเตอร์ "http2" ในคำสั่ง "listen" แล้ว
  • การป้องกันกิจกรรมที่ผิดปกติของไคลเอนต์ HTTP/2 ได้รับการเสริมความแข็งแกร่ง และโดยเฉพาะอย่างยิ่งต่อการโจมตี DoS ของคลาส “การรีเซ็ตอย่างรวดเร็ว” ซึ่งมีการสร้างเธรดที่รีเซ็ตทันทีจำนวนมากภายในการเชื่อมต่อ HTTP/2 เดียว ในการกำหนดค่าเริ่มต้น การโจมตีดังกล่าวถูกจำกัดด้วยขีดจำกัดจำนวนคำขอต่อการเชื่อมต่อ “keepalive_requests” (หลังจากคำขอทุกๆ 1000 ครั้ง การเชื่อมต่อจะถูกรีเซ็ต) และข้อจำกัด “limit_req” เพื่อตอบสนองก่อนหน้านี้ต่อการร้องขอจำนวนมากผ่านเธรดจำนวนมาก จึงมีการเพิ่มข้อจำกัดเพิ่มเติมที่ไม่อนุญาตให้สร้างเธรดใหม่มากกว่า 256 (2 * max_concurrent_streams) ต่อรอบการประมวลผลเหตุการณ์ตามค่าเริ่มต้น ขีดจำกัดใหม่ทำให้สามารถเริ่มการบล็อกคำขอก่อนที่จะถึงขีดจำกัดโดยรวมของจำนวนเธรดพร้อมกัน ตัวอย่างเช่น เมื่อเธรดถูกประมวลผลแบบอะซิงโครนัสหรือกำลังถูกฟลัช
  • เพิ่มการรองรับเซิร์ฟเวอร์เสมือนในโมดูลสตรีมแล้ว การกำหนดค่าที่กำหนดไว้ในบล็อก "เซิร์ฟเวอร์ { ... }" โดยใช้คำสั่ง server_name เซิร์ฟเวอร์ { ชื่อเซิร์ฟเวอร์ ~^(www\.)?(.+)$; proxy_pass www.$2:12345; -
  • มีการเพิ่มโมดูลใหม่ ngx_stream_pass_module ซึ่งออกแบบมาเพื่อส่งต่อการเชื่อมต่อที่ได้รับโดยตรงไปยังซ็อกเก็ตการฟังใดๆ ที่เกี่ยวข้องกับโมดูล เช่น http, สตรีม และเมล สตรีม { เซิร์ฟเวอร์ { ฟัง 12345 ssl; ssl_certificate โดเมน.crt; ssl_certificate_key โดเมน.คีย์; ผ่าน 127.0.0.1:8000; -
  • คำสั่ง Listen ของโมดูลสตรีมใช้การสนับสนุนสำหรับพารามิเตอร์ "deferred" (เปิดใช้งานการยอมรับแบบเลื่อนออกไป), "accept_filter" (ตัวกรองการเชื่อมต่อขาเข้าที่ใช้ก่อนที่จะเรียกใช้ฟังก์ชัน Accept) และพารามิเตอร์ "setfib" (การตั้งค่าตารางเส้นทาง)
  • สำหรับสถาปัตยกรรมบางตัว มีการรองรับเพื่อกำหนดขนาดบล็อก (บรรทัดแคช) ที่ใช้ในการถ่ายโอนข้อมูลระหว่างแคช CPU และหน่วยความจำ
  • ปรับปรุงการจัดการบัฟเฟอร์ที่ใช้ในการตรวจจับการเชื่อมต่อ HTTP/2 โดยอัตโนมัติ
  • ประสิทธิภาพของการเปิดตัวการกำหนดค่าด้วยคำสั่ง "สถานที่" จำนวนมากได้รับการปรับปรุงแล้ว
  • ลบการรองรับเทคโนโลยี Server push ใน HTTP/2
  • การสนับสนุนสำหรับคำสั่ง "ssl" ซึ่งเลิกใช้แล้วก่อนหน้านี้ได้ถูกยกเลิกแล้ว

การเปิดตัวโครงการ FreeNginx 1.26.0 ที่เสถียรซึ่งพัฒนาทางแยกของ Nginx ได้รับการเผยแพร่เมื่อสองสัปดาห์ก่อน ทางแยกนี้ได้รับการพัฒนาโดย Maxim Dunin หนึ่งในนักพัฒนา Nginx คนสำคัญ FreeNginx อยู่ในตำแหน่งที่เป็นโครงการที่ไม่แสวงหาผลกำไรที่ให้การพัฒนาฐานโค้ด Nginx โดยปราศจากการแทรกแซงจากองค์กร

ที่มา: opennet.ru

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