ปล่อย nginx 1.20.0

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

ตามรายงานประจำเดือนมีนาคมจาก Netcraft พบว่า nginx ถูกใช้บน 20.15% ของไซต์ที่ใช้งานอยู่ทั้งหมด (ปีที่แล้ว 19.56% สองปีที่แล้ว 20.73%) ซึ่งสอดคล้องกับอันดับที่สองในความนิยมในหมวดหมู่นี้ (ส่วนแบ่งของ Apache สอดคล้องกับ 25.38% (หนึ่งปีที่แล้ว 27.64%), Google - 10.09%, Cloudflare - 8.51% ในขณะเดียวกันเมื่อพิจารณาไซต์ทั้งหมด nginx ยังคงความเป็นผู้นำและครองตลาด 35.34% (ปีที่แล้ว 36.91% สองปีที่แล้ว - 27.52%) ในขณะที่ส่วนแบ่งของ Apache สอดคล้องกับ 25.98%, OpenResty ( แพลตฟอร์มที่ใช้ nginx และ LuaJIT) - 6.55%, Microsoft IIS - 5.96%

ในบรรดาเว็บไซต์ที่มีผู้เข้าชมมากที่สุดในโลก ส่วนแบ่งของ nginx อยู่ที่ 25.55% (ปีที่แล้ว 25.54% สองปีที่แล้ว 26.22%) ปัจจุบันมีเว็บไซต์ประมาณ 419 ล้านเว็บไซต์ที่ใช้งาน Nginx (459 ล้านปีที่แล้ว) จากข้อมูลของ W3Techs พบว่า nginx ใช้กับไซต์ 33.7% จากไซต์ที่มีผู้เข้าชมมากที่สุดล้านครั้งในเดือนเมษายนปีที่แล้วตัวเลขนี้อยู่ที่ 31.9% ปีก่อน - 41.8% (การลดลงนี้อธิบายได้จากการเปลี่ยนไปใช้บัญชีแยกของ Cloudflare http เซิร์ฟเวอร์) ส่วนแบ่งของ Apache ลดลงตลอดทั้งปีจาก 39.5% เป็น 34% และส่วนแบ่งของ Microsoft IIS จาก 8.3% เป็น 7% ส่วนแบ่งของ LiteSpeed ​​เพิ่มขึ้นจาก 6.3% เป็น 8.4% และ Node.js จาก 0.8% เป็น 1.2% ในรัสเซีย nginx ใช้กับไซต์ที่มีผู้เข้าชมมากที่สุด 79.1% (หนึ่งปีที่แล้ว - 78.9%)

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

  • เพิ่มความสามารถในการตรวจสอบใบรับรองไคลเอ็นต์โดยใช้บริการภายนอกตามโปรโตคอล OCSP (Online Certificate Status Protocol) ในการเปิดใช้งานการตรวจสอบจะมีการเสนอคำสั่ง ssl_ocsp เพื่อกำหนดค่าขนาดแคช - ssl_ocsp_cache เพื่อกำหนด URL ของตัวจัดการ OCSP ที่ระบุในใบรับรองใหม่ - ssl_ocsp_responder
  • รวมโมดูล ngx_stream_set_module ไว้ด้วย ซึ่งช่วยให้คุณสามารถกำหนดค่าให้กับเซิร์ฟเวอร์ตัวแปร { Listen 12345; ตั้งค่า $true 1; }
  • เพิ่มคำสั่ง proxy_cookie_flags เพื่อระบุการตั้งค่าสถานะสำหรับคุกกี้ในการเชื่อมต่อพรอกซี ตัวอย่างเช่น หากต้องการเพิ่มแฟล็ก “httponly” ให้กับคุกกี้ “one” และแฟล็ก “nosecure” และ “samesite=strict” สำหรับคุกกี้อื่นๆ ทั้งหมด คุณสามารถใช้โครงสร้างต่อไปนี้: proxy_cookie_flags one httponly; proxy_cookie_flags ~ noscure Samesite=เข้มงวด;

    คำสั่ง userid_flags ที่คล้ายกันสำหรับการเพิ่มแฟล็กให้กับคุกกี้ก็ถูกนำมาใช้กับโมดูล ngx_http_userid เช่นกัน

  • เพิ่มคำสั่ง "ssl_conf_command", "proxy_ssl_conf_command", "grpc_ssl_conf_command" และ "uwsgi_ssl_conf_command" ซึ่งคุณสามารถตั้งค่าพารามิเตอร์ที่กำหนดเองสำหรับการกำหนดค่า OpenSSL ตัวอย่างเช่น ในการจัดลำดับความสำคัญของการเข้ารหัส ChaCha และการกำหนดค่าขั้นสูงของการเข้ารหัส TLSv1.3 คุณสามารถระบุ ssl_conf_command ตัวเลือก PrioritizeChaCha; ssl_conf_command ชุดการเข้ารหัส TLS_CHACHA20_POLY1305_SHA256;
  • เพิ่มคำสั่ง "ssl_reject_handshake" ซึ่งสั่งให้ปฏิเสธความพยายามทั้งหมดในการเจรจาการเชื่อมต่อ SSL (เช่น สามารถใช้เพื่อปฏิเสธการโทรทั้งหมดที่มีชื่อโฮสต์ที่ไม่รู้จักในฟิลด์ SNI) เซิร์ฟเวอร์ { ฟัง 443 ssl; ssl_reject_handshake บน; } เซิร์ฟเวอร์ { ฟัง 443 ssl; เซิร์ฟเวอร์_ชื่อ example.com; ssl_certificate ตัวอย่าง.com.crt; ssl_certificate_key ตัวอย่าง.com.key; }
  • เพิ่มคำสั่ง proxy_smtp_auth ลงในพร็อกซีเมลแล้ว ซึ่งช่วยให้คุณตรวจสอบสิทธิ์ผู้ใช้บนแบ็กเอนด์ได้โดยใช้คำสั่ง AUTH และกลไก PLAIN SASL
  • เพิ่มคำสั่ง "keepalive_time" ซึ่งจำกัดอายุการใช้งานรวมของการเชื่อมต่อ Keep-alive แต่ละรายการ หลังจากนั้นการเชื่อมต่อจะถูกปิด (อย่าสับสนกับ Keepalive_timeout ซึ่งกำหนดเวลาที่ไม่มีการใช้งานหลังจากที่การเชื่อมต่อ Keep-alive ถูกปิด)
  • เพิ่มตัวแปร $connection_time ซึ่งคุณสามารถรับข้อมูลเกี่ยวกับระยะเวลาการเชื่อมต่อเป็นวินาทีด้วยความแม่นยำระดับมิลลิวินาที
  • มีการเพิ่มพารามิเตอร์ “min_free” ในคำสั่ง “proxy_cache_path”, “fastcgi_cache_path”, “scgi_cache_path” และ “uwsgi_cache_path” ซึ่งควบคุมขนาดแคชตามการกำหนดขนาดขั้นต่ำของพื้นที่ว่างในดิสก์
  • คำสั่ง "lingering_close", "lingering_time" และ "lingering_timeout" ได้รับการปรับให้ทำงานกับ HTTP/2 ได้
  • รหัสประมวลผลการเชื่อมต่อใน 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" แทน
  • เพิ่มตัวเลือกบรรทัดคำสั่งใหม่ “-e” ซึ่งช่วยให้คุณระบุไฟล์ทางเลือกสำหรับการเขียนบันทึกข้อผิดพลาด ซึ่งจะถูกใช้แทนบันทึกที่ระบุในการตั้งค่า แทนที่จะระบุชื่อไฟล์ คุณสามารถระบุค่าพิเศษ stderr ได้

ที่มา: opennet.ru

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