Score:0

เลือกส่วนหลัง haproxy tcp ขึ้นอยู่กับ ip ต้นทาง

ธง de

ฉันมีความรู้พื้นฐานเกี่ยวกับ haproxy และรู้วิธีจัดการการเลือกแบ็กเอนด์ tcp โดยขึ้นอยู่กับชื่อเซิร์ฟเวอร์ SNI

บรรทัดที่เกี่ยวข้องคือ

    acl is_myhost req.ssl_sni -i my.host.com
    acl is_otherhost req.ssl_sni -i other.host.com


    use_backend mybackend ถ้า is_myhost
    use_backend แบ็กเอนด์อื่น ๆ ถ้า is_otherhost

ตอนนี้ฉันต้องการเปลี่ยนเป็นสิ่งที่ทำให้ฉันสามารถเลือกส่วนหลังได้ขึ้นอยู่กับ IP ต้นทาง แต่ฉันไม่รู้ไวยากรณ์ที่แน่นอนสำหรับการกำหนดค่าหลอกด้านล่างหรือว่าเป็นไปได้หรือไม่

    acl is_myhost_for_specif req.ssl_sni -i my.host.com <และ source ip = 1.2.3.4>
    acl is_myhost_for_others req.ssl_sni -i my.host.com <และ ip ต้นทาง != 1.2.3.4>
    acl is_otherhost req.ssl_sni -i other.host.com


    use_backend mybackend1 ถ้า is_myhost_for_specific
    use_backend mybackend2 ถ้า is_myhost_for_others
    use_backend แบ็กเอนด์อื่น ๆ ถ้า is_otherhost

George Y avatar
vn flag
ถาม haproxy โดยตรงล่ะ
gelonida avatar
de flag
ฉันชอบความคงอยู่และความสามารถในการค้นหาคำถามเกี่ยวกับ SO ดังนั้นฉันจึงลองที่นี่ก่อน แต่ใช่ การส่งคำถามไปยังรายชื่อผู้รับจดหมาย haproxy (`[email protected]`) เป็นอีกทางเลือกหนึ่ง
Score:2
ธง ng

รหัสจำลองของคุณสำหรับ ACL ไม่ถูกต้อง เนื่องจากการประกาศ ACL ไม่มีไวยากรณ์สำหรับตรรกะ AND/OR ย้ายไปยังตำแหน่งที่คุณใช้ ACL เช่นตัวอย่างด้านล่าง
สำหรับ IP ต้นทางคือ src (https://cbonte.github.io/haproxy-dconv/2.2/configuration.html#7.3.3-src), เช่น.:

โปรดทราบว่าไวยากรณ์สำหรับการจับคู่สองเงื่อนไขในคำสั่ง if ไม่ใช่

use_backend mybackend ถ้า condition1 และ condition2

แต่เพียงแค่

use_backend mybackend ถ้าเงื่อนไข 1 เงื่อนไข 2

acl test_network src 192.168.10.0/24
acl test_network src 192.168.20.0/24
acl is_myhost_for_specif req.ssl_sni -i my.host.com

# ทั้งสอง acls ต้องเป็นจริง (is_myhost **และ** test_network)
use_backend mybackend1 ถ้า is_myhost test_network
use_backend mybackend2 ถ้า is_myhost

คำสั่งของ use_backend เป็นสิ่งสำคัญ ดังนั้น IPs จาก ทดสอบ_เครือข่าย ไปที่ แบ็กเอนด์ของฉัน1 และอื่นๆไปที่ มายแบ็คเอนด์2 หาก SNI ตรงกัน ประกาศ ทดสอบ_เครือข่าย ACL สองครั้งที่นี่หมายถึง "src_ip ตรงกับ 192.168.10.0/24 หรือ 192.168.20.0/24"

gelonida avatar
de flag
ขอบคุณ. ฉันรู้ว่ารหัสหลอกของฉันผิด แต่โชคดีที่มันดีพอที่จะอธิบายความตั้งใจของฉัน คำตอบของคุณดูเหมือนจะ **ตรงกับ** สิ่งที่ฉันกำลังมองหา ฉันไม่รู้ `test_network src` ฉันไม่รู้ว่า acls สามารถมีได้เพียงเงื่อนไขเดียว และคำสั่ง if สามารถรวม acls ได้ จะทำเครื่องหมายว่าเป็นคำตอบที่ถูกต้องทันทีที่ฉันทดสอบ
gelonida avatar
de flag
เคล็ดลับในการประกาศ acl สองครั้งก็มีประโยชน์เช่นกัน
gelonida avatar
de flag
ในที่สุดก็มีเวลาทดสอบคำตอบของคุณ มีข้อผิดพลาดเล็กน้อยในบรรทัด `use_backend mybackend1 if is_myhost and test_network` ซึ่งต้องเป็น `use_backend mybackend1 if is_myhost test_network` (โดยไม่มี `and` คำว่า `and` มีความหมายแฝง ขอบคุณอีกครั้ง
gelonida avatar
de flag
จะทำเครื่องหมายว่าเป็นคำตอบที่ถูกต้องทันทีที่คำตอบนั้นถูกต้อง (คำขอเปลี่ยนแปลงของฉันต้องได้รับการอนุมัติ)
gelonida avatar
de flag
ฉันได้เพิ่มความคิดเห็นอื่นในการเปลี่ยนแปลงของฉัน ซึ่งดูเหมือนว่าผู้ตรวจสอบ 20 รายดูการเปลี่ยนแปลงของฉัน แต่รู้สึกไม่สบายใจที่จะยอมรับการเปลี่ยนแปลงเหล่านั้น ฉันหวังว่าความคิดเห็นเพิ่มเติมของฉันจะทำให้การเปลี่ยนแปลงเข้าใจ / ยอมรับได้ง่ายขึ้น
gelonida avatar
de flag
บางทีคุณอาจใช้การเปลี่ยนแปลงกับคำตอบของคุณ ขั้นตอนการตรวจสอบคำขอแก้ไขของฉันช้าอย่างน่าประหลาดใจสำหรับข้อผิดพลาดของเซิร์ฟเวอร์ อาจเป็นเพราะ haproxy ไม่เป็นที่รู้จักกันดี หากไม่มีการเปลี่ยนแปลงที่ฉันเสนอ haproxy จะบ่นเกี่ยวกับ `acl` ที่ไม่รู้จักด้วยชื่อ `and`

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา