我想配置HAProxy的绑定到tcp
和tcp6
插座上的所有接口(即,0.0.0.0:80
和:::80
)。
我可以通过以下设置实现此目标:
listen web
bind :80 v4v6
bind :::80 v6only
有没有比这更短的方法了?
虽然我希望它的行为有所不同,但该v4v6
关键字使haproxy仅绑定到v4套接字。
我想配置HAProxy的绑定到tcp
和tcp6
插座上的所有接口(即,0.0.0.0:80
和:::80
)。
我可以通过以下设置实现此目标:
listen web
bind :80 v4v6
bind :::80 v6only
有没有比这更短的方法了?
虽然我希望它的行为有所不同,但该v4v6
关键字使haproxy仅绑定到v4套接字。
Answers:
要在同一端口上侦听IPv6和IPv4,请使用以下命令:
bind :::80 v4v6
诚然,这是一个直觉上的猜测,似乎是正确的……但是,尽管它能奏效,而不是仅仅发布“幸运”的猜测作为答案,但似乎我应该证明这一点。
v4v6关键字使haproxy仅绑定到v4套接字。
我的第一个直觉是,不是(v4v6
而是:80
,更确切地说,根本不使用IP地址,仅使用端口号)导致此套接字仅侦听IPv4。
这似乎在docs中得到了确认bind
:
address
是可选的,可以是主机名,IPv4地址,IPv6地址或'*'
。它指定前端将监听的地址。如果未设置,将列出系统的所有IPv4地址。'*'
或系统的特殊地址“0.0.0.0
” 同样适用。IPv6等效为'::'。http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#4.2-bind(添加了重点)
因此,以下三种形式都是等效的,并且被HAProxy解释为IPv4:
bind :80
bind *:80
bind 0.0.0.0:80
接下来,在文档中有一个句子v4v6
可以单独读取以表明v4v6
可能可以扩展上述bind语句之一以侦听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
呢