โซลูชันอยู่ในเอกสาร Apache 2.2 บนคำสั่ง Virtualhost :
ไวยากรณ์: ... (... ) Addr สามารถ:
- ที่อยู่ IP ของโฮสต์เสมือน
- ชื่อโดเมนแบบเต็มสำหรับที่อยู่ IP ของโฮสต์เสมือน (ไม่แนะนำ);
- อักขระ *ซึ่งใช้ร่วมกับNameVirtualHost * เพื่อจับคู่ที่อยู่ IP ทั้งหมด หรือ
- สตริง _default_ซึ่งใช้เฉพาะกับโฮสต์เสมือน IPเพื่อจับที่อยู่ IP ที่ไม่ตรงกัน
มีสองวิธีในการจัดการกับ Virtualhosts ชื่อ virtualhosting และ IP ที่ใช้ virtualhosting
ด้วย virtualhosts ตามชื่อคุณมีรายชื่อของ virtualhosts listening IP:port
แต่ละคนจัดการอย่างใดอย่างหนึ่งหรือหลายชื่อโดเมนและแต่ละคนที่เกี่ยวข้องกับคู่ *
เป็นค่าพิเศษซึ่งหมายถึงIP ทั้งหมดบนโฮสต์นี้ virtualHost เริ่มต้นเป็นประกาศครั้งแรกในรายการนี้สำหรับแต่ละที่อยู่ฟังที่ได้รับ
ด้วย VirtualHosts ที่ใช้ IP ServerName
คำสั่งของ VirtualHost จะไม่ถูกใช้ข้อมูลที่สำคัญคือ IP ที่รับฟัง (และพอร์ต) และ VirtualHost ที่เป็นค่าเริ่มต้นคือรายการแรกที่ตรงกับ IP ที่จัดการคำขอที่เข้ามา
ดังนั้นด้วยการกำหนดค่า virtualhosting ตามชื่อ:
<Virtualhost *:80> with ServerName foo.com
หมายถึง "บน IP ทั้งหมดที่จัดการกับโฮสต์นี้", "บนพอร์ต 80", "หากส่วนหัวของโฮสต์คำขอคือ foo.com" ฉันจะใช้ virtualhost นี้
<Virtualhost *:*> with Servername foo.com
หมายถึง "บน IP ทั้งหมดที่จัดการกับโฮสต์นี้", "บนพอร์ตทั้งหมด", "ถ้าส่วนหัวของโฮสต์คำขอคือ foo.com" ฉันจะใช้ virtualhost นี้
<Virtualhost 10.0.0.2:*> with Servername foo.com
หมายถึง "สำหรับคำขอที่เข้ามาจากอินเทอร์เฟซเครือข่ายของฉัน 10.0.0.2", "บนพอร์ตทั้งหมด", "ถ้าส่วนหัวโฮสต์คำขอคือ foo.com" ฉันจะใช้ virtualhost นี้
<Virtualhost _default_:*> with Servername foo.com
: ไม่ควรใช้กับ virtualhosting ตามชื่อ
และบน virtualhosting บน IP:
<Virtualhost 10.0.0.2:*>
หมายถึง "ฉันจะใช้ virtualhost นี้เพื่อขอมาบนอินเทอร์เฟซ 10.0.0.2 ของฉัน"
<Virtualhost _default_:443>
หมายถึง "ฉันจะใช้ virtualhost นี้สำหรับอินเทอร์เฟซเครือข่ายอื่น ๆ ทั้งหมดบนโฮสต์ของฉันเพื่อขอมาที่พอร์ต 443"
<Virtualhost _default_:*>
หมายถึง "ฉันจะใช้ virtualhost นี้สำหรับอินเทอร์เฟซเครือข่ายอื่น ๆ ทั้งหมดบนโฮสต์ของฉันถ้ามันไม่ตรงกับกฎก่อนหน้านี้และถ้าส่วนหัวของโฮสต์คำขอไม่ตรงกับ virtualhost ตามชื่อ"
ดังนั้นทุกอย่างเกี่ยวกับการกำหนด Virtualhost ทั้งหมด เอกสารประกอบเพิ่ม:
เมื่อใช้โฮสต์เสมือนบน IP ชื่อพิเศษ_default_
สามารถระบุได้ในกรณีนี้โฮสต์เสมือนนี้จะตรงกับที่อยู่ IP ใด ๆ ที่ไม่ได้ระบุไว้อย่างชัดเจนในโฮสต์เสมือนอื่น ในกรณีที่ไม่มี_default_
โฮสต์เสมือนใด ๆการกำหนดค่าเซิร์ฟเวอร์ "หลัก" ซึ่งประกอบด้วยคำจำกัดความทั้งหมดที่อยู่นอกส่วน VirtualHost ใด ๆ จะใช้เมื่อไม่มีการจับคู่ IP เกิดขึ้น (แต่โปรดทราบว่าที่อยู่ IP ใด ๆ ที่ตรงกับคำสั่ง NameVirtualHost จะไม่ใช้การกำหนดค่าเซิร์ฟเวอร์ "หลัก" หรือ_default_
โฮสต์เสมือนดูเอกสารประกอบการโฮสต์เสมือนตามชื่อสำหรับรายละเอียดเพิ่มเติม)
ดังนั้นหลังจากสิ่งเหล่านี้มันกลายเป็น "ชัดเจน" ที่ผสม virtualhosting ตาม IP และชื่อตามอาจกลายเป็นระเบียบ กับ virtualhosting Apache 2.2 ชื่อที่ใช้ถ้าNameVirtualhost <something>
ถูกใช้
แต่ด้วยApache 2.4เวอร์ชั่นใหม่สิ่งเหล่านี้ง่ายต่อการเข้าใจจริงๆไม่มีNameVirtualhost
การประกาศ กระบวนการ NameVirtualHost ไม่มีผลใด ๆ อีกต่อไปนอกจากจะส่งคำเตือน รวมกันอยู่ / พอร์ตที่ปรากฏในโฮสต์เสมือนหลายได้รับการปฏิบัติโดยปริยายเป็นชื่อที่ใช้โฮสต์เสมือน ไม่มีการคิดที่ซับซ้อนแม้แต่เอกสารก็ง่ายขึ้น:
- อักขระ * ซึ่งทำหน้าที่เป็นสัญลักษณ์แทนและจับคู่ที่อยู่ IP ใด ๆ
- สตริง
_default_
ซึ่งเป็นนามแฝงสำหรับ *
ดังนั้นด้วย Apache 2.4 คำตอบคือมันเป็นสิ่งเดียวกัน