Saya merasa hdr_sub lebih baik untuk kebutuhan Anda. Saya menggunakan hdr_end untuk sementara waktu tetapi mengalami masalah berikut:
permintaan dengan port 80 biasanya membuat port dilucuti sehingga header host terlihat seperti "example.com", tetapi jika Anda meminta pada port secara eksplisit, seperti example.com:8080, header akan memiliki port, dan hdr_end akan gagal periksa "example.com".
hdr_sub akan melakukan kecocokan substring, yang sepertinya lebih cocok untuk Anda (dan saya).
Entah solusi masih memiliki hal buruk yang saya tidak suka. Evaluasi hasil tergantung pesanan.
mis. (kondisi saya terlihat seperti ini di frontend)
acl is_dbadmin hdr_sub(host) -i dbadmin.example.com
Meminta pada port 8080 akan seperti ini:
Jul 9 02:48:40 localhost haproxy[8]: 192.168.1.1:55870 [09/Jul/2015:02:48:40.865] http-in example/s1 1/0/0/20/110 200 330722 - - ---- 0/0/0/0/0 0/0 {**example.com:8080**||http://example.com:} {Apache/2.4.10 (Debia||||} "GET /wp-includes/js/zxcvbn.min.js HTTP/1.1"
dimana port 80 kemungkinan bisa seperti ini
Jul 9 02:48:40 localhost haproxy[8]: 192.168.1.1:55870 [09/Jul/2015:02:48:40.865] http-in example/s1 1/0/0/20/110 200 330722 - - ---- 0/0/0/0/0 0/0 {example.com||***http://example.com***:} {Apache/2.4.10 (Debia||||} "GET /wp-includes/js/zxcvbn.min.js HTTP/1.1"
acl valid_domains hdr(host) -i mysite.com
+acl valid_domains hdr_end(host) -i .mysite.com
, atau hanya menggunakanacl valid_domains hdr_dom(host) -i mysite.com
Ada kasus di mana Anda perlu secara eksplisit tentang hal ini, seperti menangani arahan ulang untuk wildcard SSL dengan beberapa level subdomain.
Pencocokan akhir (
hdr_end
atau-m end
) atau substring (hdr_sub
atau-m sub
) dapat memiliki efek samping yang tidak diinginkan dari pencocokan lebih dari yang Anda harapkan. Dalam banyak kasus ini mungkin tidak terlalu penting, karena Anda tidak memiliki lalu lintas untuk domain yang datang ke server, tetapi itu tidak berarti itu adalah solusi yang secara teknis benar.Menggunakan ekspresi reguler adalah cara terbaik yang saya temukan untuk melakukan pencocokan eksplisit. Misalnya, jika Anda hanya ingin mencocokkan
*.example.org
tanpa mencocokkansub.domain.example.org
:Jika Anda juga ingin menangani (non-standar) port, ini dapat sedikit diperluas:
Di atas akan cocok :
test1.example.org
test2.example.org:8080
dan tidak akan cocok :
example.org
two.subs.example.org
myexample.org
test.myexample.org
test.example.org.other.com
sumber