Để nghe trên cùng một cổng cho IPv6 và IPv4, hãy sử dụng:
bind :::80 v4v6
Phải thừa nhận rằng đây là một phỏng đoán trực quan có vẻ đúng ... nhưng thay vì chỉ đăng một phỏng đoán "may mắn" như câu trả lời, mặc dù nó hoạt động, có vẻ như tôi nên biện minh cho nó.
từ khóa v4v6 làm cho haproxy chỉ liên kết với ổ cắm v4.
Trực giác đầu tiên của tôi là không v4v6
phải việc sử dụng :80
(hay chính xác hơn là việc sử dụng không có địa chỉ IP nào cả, chỉ là số cổng) khiến ổ cắm này chỉ nghe trên IPv4.
Điều này dường như được xác nhận trong các tài liệu cho bind
:
address
là tùy chọn và có thể là tên máy chủ, địa chỉ IPv4, địa chỉ IPv6 hoặc '*'
. Nó chỉ định địa chỉ mà frontend sẽ lắng nghe. Nếu không được đặt, tất cả các địa chỉ IPv4 của hệ thống sẽ được lắng nghe. Điều tương tự sẽ áp dụng cho '*'
hoặc địa chỉ đặc biệt của hệ thống " 0.0.0.0
". Tương đương IPv6 là '::'.
http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#4.2-bind (nhấn mạnh thêm)
Vì vậy, ba hình thức sau đây đều tương đương nhau và tất cả đều được HAProxy hiểu là IPv4:
bind :80
bind *:80
bind 0.0.0.0:80
Tiếp theo, có một câu trong các tài liệu v4v6
có thể được đọc tách biệt để chỉ ra rằng v4v6
có thể sử dụng được để mở rộng một trong các câu lệnh liên kết ở trên để nghe trên IPv6 ...
v4v6
Nó được sử dụng để liên kết một ổ cắm với cả IPv4 và IPv6 khi nó sử dụng địa chỉ mặc định.
... hmmm, nhưng tôi nghi ngờ rằng điều này thực sự có nghĩa là "địa chỉ mặc định v6" ( ::
) ...
Làm như vậy đôi khi cần thiết trên các hệ thống liên kết với IPv6 theo mặc định.
... và bây giờ, tôi nghi ngờ nó nhiều hơn nữa ...
Nó không có tác dụng đối với các socket không phải IPv6 và bị v6only
tùy chọn ghi đè .
http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#5.1
Vì vậy, có vẻ như v4v6
chỉ sửa đổi các bind
chỉ thị chỉ định địa chỉ nghe mặc định IPv6, đó là ::
(thứ 3 :
là dấu phân cách giữa địa chỉ và cổng) và bị bỏ qua cho các địa chỉ khác.
bind :::80 v4v6
?