Чтобы прослушивать один и тот же порт для 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, когда используется адрес по умолчанию.
... хм, но я подозреваю, что это на самом деле означает "адрес по умолчанию v6" ( ::
) ...
Иногда это необходимо в системах, которые связываются с IPv6 только по умолчанию.
... а теперь я подозреваю, что это еще больше ...
Он не влияет на сокеты не-IPv6 и переопределяется этой v6only
опцией.
http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#5.1
Таким образом, кажется, что v4v6
изменяются только bind
директивы, которые задают адрес прослушивания по умолчанию для IPv6, который является ::
(3-й :
- это разделитель между адресом и портом) и игнорируется для других.
bind :::80 v4v6
?