ความแตกต่างระหว่าง _default _: * และ *: * ในบริบท VirtualHost


34

ฉันต้องการทราบความแตกต่างระหว่าง" default : *" และ "*: *"ใน VirtualHost Context

<VirtualHost _default_:*>
  #...
  ServerName host.example.com
  #...
</VirtualHost>

<VirtualHost *:*>
  #...
  ServerName host.example.com
  #...
</VirtualHost>

ฉันไม่ทราบความแตกต่างและการใช้งานของ porpouse

Thk

คำตอบ:


39

โซลูชันอยู่ในเอกสาร 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 คำตอบคือมันเป็นสิ่งเดียวกัน


0

_default_ vhosts สำหรับพอร์ตทั้งหมด

การตรวจสอบคำขอทั้งหมดไปยังที่อยู่ IP และพอร์ตที่ไม่ระบุใด ๆ เช่นชุดที่อยู่ / พอร์ตที่ไม่ได้ใช้สำหรับโฮสต์เสมือนอื่น ๆ

http://httpd.apache.org/docs/2.2/vhosts/examples.html#default

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.