ทำความเข้าใจกับค่าที่แตกต่างกันสำหรับคำสั่ง 'nginx' Listen '


10

ฉันกำลังเขียนค่า nginx และฉันมีคำถามพื้นฐาน

อะไรคือความแตกต่างระหว่าง:

listen 443 ssl;เทียบlisten [::]:443 ssl;กับlisten [::]:443 ssl http2;

เป้าหมายของฉันปลอดภัยเว็บแอปพลิเคชั่นนี้ แต่ก็ยังใช้งานได้กับลูกค้าเก่า

หมายเหตุ: ฉันเข้าใจว่า[::]:443ต้องใช้กับ ipv6 แต่รวมถึง ipv4 ด้วยในกรณีนี้หรือไม่ ต้องการล้างแนวคิดของฉัน

คำตอบ:


16

listen 443 ssl: ทำให้ nginx คอยฟังที่อยู่ ipv4 ทั้งหมดบนเซิร์ฟเวอร์ที่พอร์ต 443 ( 0.0.0.0:443)

ในขณะที่

listen [::]:443 ssl: ทำให้ nginx listen ที่อยู่ ipv6 ทั้งหมดบนเซิร์ฟเวอร์ที่พอร์ต 443 ( :::443)


[::]:443จะไม่ทำให้ nginx ตอบสนองบน ipv4 โดยค่าเริ่มต้นเว้นแต่คุณจะระบุพารามิเตอร์ipv6only=off:

listen [::]:443 ipv6only=off;


ตามเอกสาร: http://nginx.org/en/docs/http/ngx_http_core_module.html#listen

ssl:

พารามิเตอร์ ssl (0.7.14) อนุญาตให้ระบุว่าการเชื่อมต่อทั้งหมดที่ยอมรับในพอร์ตนี้ควรทำงานในโหมด SSL

http2:

พารามิเตอร์ http2 (1.9.5) กำหนดค่าพอร์ตเพื่อยอมรับการเชื่อมต่อHTTP / 2

นี่ไม่ได้หมายความว่ามันรองรับเฉพาะการเชื่อมต่อ HTTP / 2

ตามRFC7540

ไคลเอนต์ที่ทำการร้องขอสำหรับ "http" URI โดยปราศจากความรู้ก่อนหน้าเกี่ยวกับการสนับสนุน HTTP / 2 ใน hop ถัดไปใช้กลไกการอัพเกรด HTTP ไคลเอ็นต์ทำเช่นนั้นโดยการร้องขอ HTTP / 1.1 ที่มีฟิลด์ส่วนหัวอัพเกรดด้วยโทเค็น "h2c"

เซิร์ฟเวอร์ที่ไม่สนับสนุน HTTP / 2 สามารถตอบสนองต่อการร้องขอราวกับว่าฟิลด์ส่วนหัวการอัพเกรดขาดไป

HTTP/1.1 200 OK Content-Length: 243 Content-Type: text/html

เซิร์ฟเวอร์ที่รองรับ HTTP / 2 ยอมรับการอัพเกรดด้วยการตอบสนอง 101 (Switching Protocols) หลังจากบรรทัดว่างที่ยุติการตอบสนอง 101 เซิร์ฟเวอร์สามารถเริ่มส่งเฟรม HTTP / 2

เพื่อสรุป:

ไคลเอ็นต์ที่ไม่สนับสนุน HTTP / 2 จะไม่ขอให้เซิร์ฟเวอร์อัปเกรดการสื่อสาร HTTP / 2: การสื่อสารระหว่างพวกเขาจะเป็น HTTP1 / 1 อย่างเต็มที่

ไคลเอนต์ที่รองรับ HTTP / 2 จะถามเซิร์ฟเวอร์ (โดยใช้ HTTP1 / 1) สำหรับการอัพเกรด HTTP / 2:

  • หากเซิร์ฟเวอร์พร้อม HTTP / 2 เซิร์ฟเวอร์จะสังเกตเห็นลูกค้าเช่น: การสื่อสารระหว่างพวกเขาจะเปลี่ยนเป็น HTTP / 2
  • หากเซิร์ฟเวอร์ยังไม่พร้อม HTTP / 2 เซิร์ฟเวอร์จะเพิกเฉยต่อคำขออัปเกรดด้วย HTTP1 / 1: การสื่อสารระหว่างกันควรอยู่ HTTP1 / 1 มากมาย

อาจสรุปเพิ่มเติมได้ที่นี่: http://qnimate.com/http2-compatibility-with-old-browsers-and-servers/


อย่างไรก็ตามเอกสาร nginx ระบุต่อไปนี้เกี่ยวกับ HTTP / 2 บน TLS:

โปรดทราบว่าการยอมรับการเชื่อมต่อ HTTP / 2 ผ่าน TLS ต้องใช้การสนับสนุนส่วนขยาย“ Application-Layer Protocol เจรจา” (ALPN) TLS ซึ่งใช้ได้เฉพาะตั้งแต่ OpenSSL เวอร์ชัน 1.0.2

ตรวจสอบให้แน่ใจว่าไคลเอนต์เก่าสอดคล้องกับข้อกำหนดนี้


0

มีตัวเลือกที่เรียกว่าipv6onlyกำหนดว่าที่อยู่ IPv6 ใช้กับ IPv4 หรือไม่ โดยค่าเริ่มต้นจะเปิด (ซึ่งหมายความว่าไม่)

คู่มือระบุว่าสามารถตั้งค่าได้เพียงครั้งเดียวเท่านั้นซึ่งฉันคิดว่าหมายความว่าหากคุณปิดมันในlistenทิศทางเดียวมันจะถูกปิดสำหรับทุกคน

ดูเอกสารนี้สำหรับรายละเอียด


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