Je veux configurer haproxy pour se lier à un socket tcp
ainsi qu'à tcp6
toutes les interfaces (c'est-à-dire, 0.0.0.0:80
et :::80
).
J'ai pu atteindre cet objectif avec les paramètres suivants:
listen web
bind :80 v4v6
bind :::80 v6only
Y a-t-il un moyen plus court que cela?
Bien que je m'attende à ce qu'il se comporte différemment, le v4v6
mot clé fait que haproxy ne se lie qu'à un socket v4.
bind :::80 v4v6
?Réponses:
Pour écouter sur le même port pour IPv6 et IPv4, utilisez ceci:
Certes, c'était une supposition intuitive qui semble avoir été correcte ... mais plutôt que de simplement poster une supposition "chanceuse" comme réponse, même si cela fonctionne, il semble que je devrais la justifier.
Ma première intuition était que ce n'est pas
v4v6
mais plutôt l'utilisation:80
(ou, plus précisément, l'utilisation d'aucune adresse IP du tout, juste un numéro de port) qui fait que cette socket n'écoute que sur IPv4.Cela semble être confirmé dans les documents pour
bind
:Ainsi, les trois formes suivantes sont toutes équivalentes et sont toutes interprétées comme étant IPv4 par HAProxy:
Ensuite, il y a une phrase dans les documents pour
v4v6
pourrait être lue isolément pour indiquer qu'ilv4v6
pourrait être utile d'étendre l'une des instructions de liaison ci-dessus pour écouter sur IPv6 ...... hmmm, mais je soupçonne que cela signifie en fait "l'adresse par défaut v6" (
::
) ...... et maintenant, je le soupçonne encore plus ...
Ainsi, il semble que
v4v6
ne modifiebind
que les directives qui spécifient l'adresse d'écoute IPv6 par défaut, qui est::
(la 3e:
est le séparateur entre l'adresse et le port), et est ignorée pour les autres.la source
La réponse acceptée ne fonctionne pas pour moi, du moins avec haproxy-1.6.11p0 sur OpenBSD. Aussi, TL; DR. Faites juste:
et cela fonctionnera:
la source