ใช้ HTTP / 2.0 ระหว่าง nginx reverse-proxy และเว็บเซิร์ฟเวอร์แบ็กเอนด์


19

ฉันใช้ nginx เป็น reverse-ssl-proxy หน้าเว็บเซิร์ฟเวอร์ส่วนหลังที่สามารถทำ HTTP / 2.0 ได้

ฉันสังเกตเห็นว่า nginx พร็อกซีร้องขอไปยังเซิร์ฟเวอร์เบื้องหลังผ่าน HTTP / 1.1 มากกว่า HTTP / 2.0 เป็นไปได้ไหมที่จะบอกให้ nginx ใช้การเชื่อมต่อ HTTP / 2.0 ที่ไม่เข้ารหัสแทน? ประสิทธิภาพนี้จะเพิ่มขึ้นหรือไม่


แม้ว่ารายละเอียด http2 จะบอกว่าไม่ต้องการการเข้ารหัส แต่ปัจจุบัน nginx ไม่รองรับ http2 หากไม่มี ssl
Marco

ดังนั้นจะใช้ HTTP / 2.0 หากฉันได้ระบุที่อยู่ https: // ถ้าอย่างนั้นฉันคิดว่าฉันควรใช้ HTTP / 1.1 ดีกว่า มันไม่สมเหตุสมผลเลยที่จะเข้ารหัสทราฟฟิกสองครั้งและประสิทธิภาพของ HTTP / 2.0 ด้วย ssl อาจจะไม่ดีเท่า HTTP / 1.1 ที่ไม่มี ssl ใช่หรือไม่ ฉันหมายถึงชนิดของสิ่งที่ทำให้ reverse-ssl-proxy ไร้ประโยชน์;)
S1lentSt0rm

ไม่สำคัญว่าคุณเข้ารหัสทราฟฟิกระหว่างเซิร์ฟเวอร์ด้านหน้าและเซิร์ฟเวอร์ส่วนหลังหากอยู่ในเครื่องเดียวกัน สำหรับประสิทธิภาพ: http2 นั้นค่อนข้างเร็วกว่า http1.1 เล็กน้อยแม้ว่าจะมีการเข้ารหัสก็ตาม ไม่สามารถพูดได้โดยไม่ต้องพยายามถ้ามันจะสร้างความแตกต่าง
Marco

คำตอบ:


21

พบสิ่งนี้: https://trac.nginx.org/nginx/ticket/923

ไม่มีแผนการที่จะใช้การสนับสนุน HTTP / 2 ในโมดูลพร็อกซีในอนาคตอันใกล้

ตัดตอนมาจากจดหมายที่อ้างอิงในตั๋ว:

แทบไม่มีเหตุผลที่จะใช้มันเนื่องจากประโยชน์หลักของ HTTP / 2 คือช่วยให้การร้องขอหลาย ๆ ครั้งในการเชื่อมต่อเดียวทำให้ [เกือบ] ลบขีด จำกัด ตามจำนวนคำขอ simalteneous - และไม่มีข้อ จำกัด ดังกล่าวเมื่อพูดคุยกับ แบ็กเอนด์ของคุณเอง ยิ่งไปกว่านั้นสิ่งต่าง ๆ อาจยิ่งแย่ลงเมื่อใช้ HTTP / 2 เพื่อแบ็กเอนด์เนื่องจากการเชื่อมต่อ TCP เดียวถูกใช้แทนหลาย ๆ ตัว


9
ดูเหมือนว่านี่หมายความว่าคุณไม่สามารถใช้ HTTP / 2 Server Push ได้หากคุณใช้ proxying กับ nginx แม้ว่าเซิร์ฟเวอร์แบ็กเอนด์จะรองรับเป็นอย่างอื่นหากมีการเข้าถึงโดยตรง
thomasrutter

3
ฉันใช้พร็อกซีแบบย้อนกลับของ nginx สำหรับเว็บไซต์ที่ไม่ใช่ระบบท้องถิ่นผ่านการเชื่อมต่อที่ช้าดังนั้น HTTP / 2 จะช่วยฉันได้ เป็นเรื่องน่าละอายที่นักพัฒนา nginx ไม่ได้พิจารณากรณีการใช้งาน :-(.
markshep

5

เศร้า nginx ไม่สนับสนุนพร็อกซีไปยังเซิร์ฟเวอร์แบ็กเอนด์ http / 2 อ้างอิงจากhttps://www.nginx.com/blog/http2-module-nginx/#QandA

ถาม: คุณจะสนับสนุน HTTP / 2 ที่ฝั่งอัปสตรีมด้วยหรือสนับสนุน HTTP / 2 ที่ฝั่งไคลเอ็นต์เท่านั้น

ตอบ: ในขณะนี้เราสนับสนุน HTTP / 2 ทางฝั่งไคลเอ็นต์เท่านั้น คุณไม่สามารถกำหนดค่า HTTP / 2 ด้วย proxy_pass [บรรณาธิการ - ในโพสต์ดั้งเดิมของโพสต์นี้ประโยคนี้มีการถอดความอย่างไม่ถูกต้องเป็น“ คุณสามารถกำหนดค่า HTTP / 2 ด้วย proxy_pass” เราขออภัยในความสับสนที่อาจเกิดขึ้น]

แต่จุด HTTP / 2 ที่ด้านหลังคืออะไร? เนื่องจากอย่างที่คุณเห็นจากการวัดประสิทธิภาพ HTTP / 2 มีประโยชน์ไม่มากสำหรับเครือข่ายเวลาแฝงเช่นการเชื่อมต่ออัปสตรีม

นอกจากนี้ใน NGINX คุณมีโมดูล keepalive และคุณสามารถกำหนดค่าแคช keepalive ประโยชน์ด้านประสิทธิภาพหลักของ HTTP / 2 คือการกำจัด handshakes เพิ่มเติม แต่ถ้าคุณทำเช่นนั้นด้วยแคช keepalive คุณไม่จำเป็นต้องใช้ HTTP / 2 ทางด้านอัปสตรีม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.