ในการฟังบนพอร์ตเดียวกันสำหรับ IPv6 และ IPv4 ให้ใช้สิ่งนี้:
bind :::80 v4v6
เป็นที่ยอมรับกันว่านี่เป็นคำตอบที่เข้าใจง่ายซึ่งดูเหมือนจะถูกต้อง ... แต่แทนที่จะเป็นเพียงคำตอบที่ "โชคดี" เป็นคำตอบแม้ว่ามันจะได้ผลดูเหมือนว่าฉันควรจะพิสูจน์
คำหลัก v4v6 ทำให้ haproxy เชื่อมโยงกับซ็อกเก็ต v4 เท่านั้น
สัญชาตญาณแรกของฉันคือว่ามันไม่ใช่v4v6
แต่เป็นการใช้:80
(หรือแม่นยำยิ่งขึ้นการใช้ที่อยู่ IP ไม่ทั้งหมดหมายเลขพอร์ต) ที่ทำให้ซ็อกเก็ตนี้ฟังบน IPv4 เท่านั้น
ดูเหมือนว่าจะได้รับการยืนยันในเอกสารสำหรับbind
:
address
เป็นตัวเลือกและสามารถเป็นชื่อโฮสต์ที่อยู่ IPv4, ที่อยู่ IPv6 '*'
หรือ มันกำหนดที่อยู่ส่วนหน้าจะฟัง หากไม่มีการตั้งค่าที่อยู่ IPv4 ทั้งหมดของระบบจะรับฟัง จะใช้'*'
หรือที่อยู่พิเศษของระบบ " 0.0.0.0
" IPv6 ที่เทียบเท่าคือ '::'
http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#4.2-bind (เน้นการเน้น)
ดังนั้นแบบฟอร์มสามแบบต่อไปนี้จึงเทียบเท่ากันทั้งหมดและถูกตีความว่าเป็น IPv4 โดย HAProxy:
bind :80
bind *:80
bind 0.0.0.0:80
ถัดไปมีหนึ่งประโยคในเอกสารที่v4v6
สามารถอ่านแยกได้เพื่อระบุว่าv4v6
อาจใช้งานได้เพื่อขยายหนึ่งในคำสั่งการเชื่อมโยงข้างต้นเพื่อฟังบน IPv6 ...
v4v6
มันถูกใช้เพื่อผูกซ็อกเก็ตกับทั้ง IPv4 และ IPv6 เมื่อมันใช้ที่อยู่เริ่มต้น
... hmmm แต่ฉันสงสัยว่านี่หมายถึง "ที่อยู่เริ่มต้น v6" ( ::
) ...
ในบางครั้งการทำเช่นนั้นจำเป็นสำหรับระบบที่ผูกกับ IPv6 โดยค่าเริ่มต้นเท่านั้น
... และตอนนี้ฉันสงสัยมากยิ่งขึ้น ...
มันไม่มีผลกับซ็อกเก็ตที่ไม่ใช่ IPv6 และถูกแทนที่โดยv6only
ตัวเลือก
http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#5.1
ดังนั้นจึงปรากฏขึ้นว่าv4v6
มีการปรับเปลี่ยนbind
คำสั่งที่ระบุที่อยู่ฟังเริ่มต้นของ IPv6 ซึ่งก็คือ::
(ที่ 3 :
คือตัวคั่นระหว่างที่อยู่และพอร์ต) และจะถูกละเว้นสำหรับผู้อื่น
bind :::80 v4v6
อะไร