我想配置haproxy以绑定到所有接口(即和)上的atcp
和tcp6
套接字。0.0.0.0:80
:::80
我能够通过以下设置达到这个目标:
listen web
bind :80 v4v6
bind :::80 v6only
Run Code Online (Sandbox Code Playgroud)
还有比这更短的方法吗?
虽然我希望它的行为有所不同,但v4v6
关键字使haproxy 仅绑定到 v4 套接字。
Mic*_*bot 29
要在同一端口上侦听 IPv6 和 IPv4,请使用以下命令:
bind :::80 v4v6
Run Code Online (Sandbox Code Playgroud)
诚然,这是一个直观的猜测,似乎是正确的……但不仅仅是发布一个“幸运”的猜测作为答案,即使它有效,似乎我应该证明它是合理的。
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(强调)
所以以下三种形式都是等价的,都被HAProxy解释为IPv4:
bind :80
bind *:80
bind 0.0.0.0:80
Run Code Online (Sandbox Code Playgroud)
接下来,文档中有一句话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 默认侦听地址的指令,即::
(第三个:
是地址和端口之间的分隔符),其他指令被忽略。
小智 8
接受的答案对我不起作用,至少在 OpenBSD 上使用 haproxy-1.6.11p0。另外,TL; DR。做就是了:
bind 0.0.0.0:80
bind :::80
Run Code Online (Sandbox Code Playgroud)
它会起作用:
# netstat -an|grep "*.80"
tcp 0 0 *.80 *.* LISTEN
tcp6 0 0 *.80 *.* LISTEN
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26638 次 |
最近记录: |