Cloudflare ได้เตรียมโมดูลเพื่อรองรับโปรโตคอล HTTP / 3 ใน NGINX. โมดูลเสร็จสิ้น ในรูปแบบของ snap บนไลบรารี quiche พัฒนาที่ Cloudflare โดยใช้โปรโตคอลการขนส่ง QUIC และ HTTP / 3 รหัสคีชเขียนด้วยสนิมแต่โมดูลสำหรับ NGINX เขียนด้วย C และเข้าถึงไลบรารีผ่านลิงก์แบบไดนามิก เวลาทำการเปิดให้บริการภายใต้ใบอนุญาต BSD
จากซอฟต์แวร์ไคลเอ็นต์ เพิ่มการรองรับ HTTP / 3 ในรุ่นทดลองของ Chrome Canary แล้ว และยูทิลิตี้ curl ในฝั่งเซิร์ฟเวอร์นั้นจำเป็นต้องใช้การทดสอบแบบแยกส่วนที่มีความสามารถ จำกัด ความสามารถในการจัดการ HTTP / 3 ใน nginx จะทำให้การปรับใช้เซิร์ฟเวอร์ง่ายขึ้นอย่างมากด้วยการรองรับ HTTP / 3 และจะทำให้การดำเนินการทดสอบของโปรโตคอลใหม่สามารถเข้าถึงได้มากขึ้น
HTTP / 3 กำหนดมาตรฐานการใช้โปรโตคอล QUIC เป็นการขนส่งสำหรับ HTTP / 2 โปรโตคอล QUIC ได้รับการพัฒนาโดย Google เพื่อเป็นทางเลือกแทน TCP + TLS สำหรับเว็บดังนั้น มุ่งมั่นที่จะแก้ปัญหาเกี่ยวกับการติดตั้งและการประสานงานใน TCP เป็นเวลานาน และความล่าช้าในการกำจัดการสูญหายของแพ็คเก็ตระหว่างการส่งข้อมูล QUIC เป็นปลั๊กอินของโปรโตคอล UDP ที่รองรับการเชื่อมต่อแบบมัลติเพล็กซ์หลายการเชื่อมต่อและมีวิธีการเข้ารหัสที่เทียบเท่ากับ TLS / SSL
ในลักษณะสำคัญของ QUIC ที่โดดเด่น:
- ความปลอดภัยสูงคล้ายกับ TLS (อันที่จริง QUIC ให้ความสามารถในการใช้ TLS ผ่าน UDP)
- การควบคุมความสมบูรณ์ของการไหลที่ป้องกันการสูญหายของแพ็คเก็ต
- ความสามารถในการสร้างการเชื่อมต่อทันที (0-RTT ในกรณีประมาณ 75% สามารถถ่ายโอนข้อมูลได้ทันทีหลังจากส่งแพ็คเก็ตการตั้งค่าการเชื่อมต่อ) และตรวจสอบให้แน่ใจว่ามีความล่าช้าน้อยที่สุดระหว่างการส่งคำขอและการรับการตอบกลับ (RTT, Round Trip Time) .
- ไม่ใช้หมายเลขลำดับเดียวกันเมื่อส่งแพ็กเก็ตใหม่ซึ่งจะหลีกเลี่ยงความคลุมเครือในการกำหนดแพ็กเก็ตที่ได้รับและกำจัดการหมดเวลา
- การสูญเสียแพ็คเก็ตมีผลต่อการส่งเฉพาะสตรีมที่เชื่อมโยงกับแพ็กเก็ตและไม่หยุดการส่งข้อมูลในสตรีมที่ส่งแบบขนานผ่านการเชื่อมต่อปัจจุบัน
- เครื่องมือแก้ไขข้อผิดพลาดที่ช่วยลดความล่าช้าเนื่องจากการส่งแพ็กเก็ตที่สูญหายอีกครั้ง การใช้รหัสแก้ไขข้อผิดพลาดระดับแพ็คเก็ตพิเศษเพื่อลดสถานการณ์ที่ต้องส่งซ้ำข้อมูลแพ็กเก็ตที่สูญหาย
- ขอบเขตบล็อกการเข้ารหัสจะสอดคล้องกับขอบเขตแพ็คเก็ต QUIC ซึ่งช่วยลดผลกระทบของการสูญเสียแพ็กเก็ตในการถอดรหัสเนื้อหาของแพ็กเก็ตที่ตามมา
- ไม่มีปัญหากับการบล็อกคิว TCP
- รองรับตัวระบุการเชื่อมต่อซึ่งช่วยลดเวลาในการสร้างการเชื่อมต่อใหม่สำหรับไคลเอนต์มือถือ
- ความสามารถในการเชื่อมต่อกลไกขั้นสูงเพื่อควบคุมการเชื่อมต่อเกินพิกัด
- ใช้เทคนิคการทำนายแบนด์วิดท์ในแต่ละทิศทางเพื่อให้แน่ใจว่ามีความเข้มในการส่งต่อแพ็กเก็ตที่เหมาะสมที่สุดป้องกันไม่ให้เข้าสู่สภาวะความแออัดซึ่งสังเกตเห็นการสูญเสียแพ็กเก็ต
- ประสิทธิภาพและประสิทธิภาพที่โดดเด่นเพิ่มขึ้นผ่าน TCP สำหรับบริการวิดีโอเช่น YouTube QUIC พบว่าการดำเนินการบัฟเฟอร์ซ้ำลดลง 30% เมื่อดูวิดีโอ
จะใช้โมดูลเพื่อรองรับ HTTP / 3 ใน NGINX ได้อย่างไร?
สำหรับผู้ที่สนใจสามารถติดตั้งโมดูลนี้บนเซิร์ฟเวอร์ได้ สามารถทำได้โดยทำตามคำแนะนำที่เราแบ่งปันด้านล่าง
เพื่อรวบรวมมัน พวกเขาต้องดาวน์โหลดแพทช์สำหรับ nginx 1.16 และรหัสไลบรารี quiche
curl -O https://nginx.org/download/nginx-1.16.1.tar.gz tar xzvf nginx-1.16.1.tar.gz git clone --recursive https://github.com/cloudflare/quiche cd nginx-1.16.1 patch -p01 < ../quiche/extras/nginx/nginx-1.16.patch
และเรารวบรวม NGINX โดยเปิดใช้งานการสนับสนุน HTTP / 3:
./configure \ --prefix=$PWD \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_v3_module \ --with-openssl=../quiche/deps/boringssl \ --with-quiche=../quiche make
ในระหว่างการคอมไพล์การรองรับ TLS จะต้องเป็นไปตามไลบรารี BoringSSL ("–with-openssl = .. / quiche / deps / boringssl") ยังไม่รองรับการใช้ OpenSSL
ในการยอมรับการเชื่อมต่อในการกำหนดค่าพวกเขาจะต้องเพิ่มคำสั่ง Listener ด้วยแฟล็ก "quic"