Saya ingin mengkonfigurasi haproxy untuk mengikat ke soket tcp
serta tcp6
pada semua antarmuka (yaitu, 0.0.0.0:80
dan :::80
).
Saya dapat mencapai tujuan ini dengan pengaturan berikut:
listen web
bind :80 v4v6
bind :::80 v6only
Apakah ada cara yang lebih pendek dari ini?
Sementara saya berharap untuk berperilaku berbeda, v4v6
kata kunci membuat haproxy mengikat ke soket v4 saja.
bind :::80 v4v6
?Jawaban:
Untuk mendengarkan pada port yang sama untuk IPv6 dan IPv4, gunakan ini:
Memang, ini adalah dugaan intuitif yang tampaknya benar ... tetapi alih-alih hanya memposting tebakan "beruntung" sebagai jawabannya, meskipun berhasil, sepertinya saya harus membenarkannya.
Intuisi pertama saya adalah bahwa ini bukan
v4v6
hanya penggunaan:80
(atau, lebih tepatnya, tidak menggunakan alamat IP sama sekali, hanya nomor port) yang menyebabkan soket ini hanya mendengarkan IPv4.Ini tampaknya dikonfirmasi dalam dokumen untuk
bind
:Jadi tiga bentuk berikut semuanya setara, dan semua ditafsirkan sebagai IPv4 oleh HAProxy:
Selanjutnya, ada satu kalimat dalam dokumen untuk
v4v6
dapat dibaca secara terpisah untuk menunjukkan bahwav4v6
mungkin dapat digunakan untuk memperpanjang salah satu pernyataan ikatan di atas untuk mendengarkan pada IPv6 ...... hmmm, tapi saya curiga ini sebenarnya berarti "alamat default v6" (
::
) ...... dan sekarang, saya curiga bahkan lebih ...
Jadi, tampaknya
v4v6
hanya memodifikasibind
arahan yang menentukan alamat mendengarkan default IPv6, yaitu::
(yang ke-3:
adalah pemisah antara alamat dan port), dan diabaikan untuk orang lain.sumber
Jawaban yang diterima tidak berfungsi untuk saya, setidaknya dengan haproxy-1.6.11p0 di OpenBSD. Juga, TL; DR. Lakukan saja:
dan itu akan berhasil:
sumber