คำถาม
ข้อใดคือวิธีที่ถูกต้องในการกำหนดค่า Azure Application Gateway เพื่อให้สามารถจัดการคำขอที่ใช้ส่วนหัวของโฮสต์ที่มีเฉพาะชื่อโฮสต์ (เช่น ไม่ใช่ชื่อโดเมนแบบเต็ม) เนื่องจากไคลเอนต์ใช้รายการส่วนต่อท้ายการค้นหา DNS เพื่อจัดการสิ่งนี้
รายละเอียด
เรามี Azure Application Gateway ซึ่งกำหนดค่าด้วย IP ส่วนตัวเพื่อทำหน้าที่เป็นโหลดบาลานเซอร์สำหรับเว็บไซต์ภายใน/เว็บแอปพลิเคชันต่างๆ
เนื่องจากเรากำลังจัดการหลายไซต์บนเกตเวย์ของแอปนี้ ฉันได้กำหนดค่า Listener หลายไซต์ ซึ่งใช้ HTTP/1.1 Host Header เพื่อกำหนดเส้นทางคำขอไปยังแบ็กเอนด์ที่เกี่ยวข้องได้อย่างถูกต้อง
ไซต์เหล่านี้หลายแห่งมี FQDN ซึ่งอยู่บนส่วนต่อท้ายโดเมนหลักของเรา เช่น. การรายงานโดเมน.example.com
. เนื่องจากโดเมนหลักของเราอยู่ในรายการคำต่อท้ายการค้นหาของอุปกรณ์ไคลเอ็นต์ ซึ่งหมายความว่าโดยปกติแล้วโดเมนดังกล่าวจะสามารถพิมพ์ การรายงาน
และให้ DNS แก้ไขสิ่งนี้เป็น การรายงานโดเมน.example.com
พาพวกเขาไปยังสถานที่ที่ถูกต้อง อย่างไรก็ตาม เบราว์เซอร์ไม่ส่ง FQDN ที่แก้ไข DNS แต่ส่งชื่อโฮสต์ที่ผู้ใช้ป้อนในค่าส่วนหัวของโฮสต์ ซึ่งหมายความว่าผู้ฟังของฉันจะไม่ได้รับชื่อเต็มตามที่คาดหวัง
ฉันสามารถแก้ไขสิ่งนี้ได้ สร้างผู้ฟังที่กำหนดค่าด้วยชื่อโฮสต์โดยไม่มีส่วนต่อท้าย DNS เพื่อบันทึกคำขอที่มาถึงด้วยวิธีนี้ และฉันยังสามารถจัดการกับ HTTPS ได้ เนื่องจากเรามีผู้ออกใบรับรองที่เชื่อถือได้ (เช่น บริการใบรับรอง AD) ดังนั้น จึงสามารถออกใบรับรองที่มีทั้ง FQDN และรูปแบบชื่อย่อในรายการ SAN ได้
อย่างไรก็ตาม ฉันพบสิ่งแปลกประหลาดหลังจากตั้งค่าไซต์ไม่กี่แห่ง... โดยมีการกำหนดค่าผู้ฟังดังนี้:
- ผู้ฟัง
ตัวอย่าง 1.domain.example.com
-> เปลี่ยนเส้นทางไปยังไซต์ภายนอก
- ผู้ฟัง
ตัวอย่างที่ 1
-> เปลี่ยนเส้นทางไปยังผู้ฟัง ตัวอย่าง 1.domain.example.com
- ผู้ฟัง
ตัวอย่าง 1-test.domain.example.com
-> นั่งอยู่เหนือสระหลังบ้าน
ฉันพบว่ามีการร้องขอไปยัง https://example1-test.domain.example.com
ถูกเปลี่ยนเส้นทางไปยังไซต์ภายนอกที่กำหนดค่าไว้บนตัวฟัง ตัวอย่าง 1.domain.example.com
.
ฉันทดสอบด้วยเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ของ Chrome เครือข่าย
> ปิดการใช้งานแคช
เลือกตัวเลือกเพื่อให้แน่ใจว่าฉันไม่ได้รับผลกระทบจาก 301 ที่แคชไว้ ตรวจสอบการกำหนดค่าของเกตเวย์แอปอีกครั้งเพื่อให้แน่ใจว่าฉันไม่ได้จับคู่ฟังกับกฎการกำหนดเส้นทางคำขอที่ไม่ถูกต้อง หรือกำหนดค่ากฎไม่ถูกต้อง และลบและสร้างฟังและกฎใหม่ ในกรณีที่มีบางอย่างเสียหาย แต่ไม่มีความสุข
เมื่อฉันเปลี่ยนชื่อโฮสต์ของ ตัวอย่างที่ 1
ผู้ฟัง XXXตัวอย่าง1
ฉันพบว่า ตัวอย่าง 1-test.domain.example.com
เริ่มทำงานตามที่คาดไว้
ฉันไม่พบเอกสารประกอบใดๆ ในการตั้งค่านี้ จึงไม่รู้ว่าเป็นข้อบกพร่องหรือไม่ หากสิ่งที่ฉันพยายามไม่ได้รับการสนับสนุน หากผู้ฟังไม่ได้ใช้สตริงแต่มีการจับคู่รูปแบบ/regex เทียบเท่าบางรูปแบบ หรือ หากมีวิธีอื่นที่เป็นทางการในการจัดการกับสถานการณ์นี้แทนวิธีที่ฉัน "ค้นพบ"