私には、configureにしたいhaproxyに結合するtcpだけでなく、tcp6すべてのインターフェイス上のソケット(すなわち、0.0.0.0:80と:::80)。
次の設定でこの目標を達成できました。
listen web
  bind :80 v4v6
  bind :::80 v6only
これより短い方法はありますか?
私はそれが異なる振る舞いをすると予想しますが、v4v6キーワードはhaproxyをv4ソケットのみにバインドします。
私には、configureにしたいhaproxyに結合するtcpだけでなく、tcp6すべてのインターフェイス上のソケット(すなわち、0.0.0.0:80と:::80)。
次の設定でこの目標を達成できました。
listen web
  bind :80 v4v6
  bind :::80 v6only
これより短い方法はありますか?
私はそれが異なる振る舞いをすると予想しますが、v4v6キーワードはhaproxyをv4ソケットのみにバインドします。
回答:
同じポートでIPv6とIPv4をリッスンするには、次を使用します。
bind :::80 v4v6
確かに、これは正しいように思われる直感的な推測でした...しかし、単に「幸運な」推測を答えとして投稿するのではなく、うまくいくとしても、それを正当化する必要があるようです。
v4v6キーワードは、haproxyをv4ソケットのみにバインドします。
私の最初の直観は、このソケットがIPv4のみでリッスンする原因v4v6ではなく、むしろ:80(より正確には、IPアドレスをまったく使用せず、ポート番号のみを使用する)使用であるということでした。
これは、ドキュメントで確認されているようですbind:
addressオプションであり、ホスト名、IPv4アドレス、IPv6アドレス、または'*'。フロントエンドがリッスンするアドレスを指定します。設定されていない場合、システムのすべてのIPv4アドレスがリスニングされます。同じことが適用される'*'か、システムの特別なアドレス「0.0.0.0」。同等のIPv6は「::」です。http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#4.2-bind(強調を追加)
したがって、次の3つの形式はすべて同等であり、すべてHAProxyによってIPv4として解釈されます。
bind :80
bind *:80
bind 0.0.0.0:80
次に、上記のバインドステートメントの1つを拡張してIPv6でリッスンするために使用できる可能性があることv4v6を示すために、ドキュメント内に1つの文を単独で読むことができv4v6ます...
v4v6
これは、デフォルトアドレスを使用するときに、ソケットをIPv4とIPv6の両方にバインドするために使用されます。
...うーん、しかし、これは実際には「v6のデフォルトアドレス」(::)を意味すると思う...
デフォルトでのみIPv6にバインドするシステムでは、そうすることが必要な場合があります。
...そして今、私はそれをさらに疑っています...
非IPv6ソケットには効果がなく、
v6onlyオプションによってオーバーライドされます。http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#5.1
そのため、IPv6のデフォルトリスンアドレスを指定v4v6するbindディレクティブのみを変更しているように見えます。これは::(3番目:はアドレスとポートの間の区切り文字です)、他の場合は無視されます。
bind :::80 v4v6?