การโฮสต์เสมือน วิธีการจัดการหลายโดเมนบนเซิร์ฟเวอร์เดียว
สรุปใจความสำคัญ
- การโฮสต์เสมือนช่วยให้เซิร์ฟเวอร์เครื่องเดียวสามารถรองรับได้หลายโดเมนเนม
- การโฮสต์แบบ Name-based ใช้ HTTP Host header ในการแยกแยะเว็บไซต์
- การโฮสต์แบบ IP-based กำหนดให้หนึ่งเว็บไซต์ต่อหนึ่งที่อยู่ IP
- SNI (Server Name Indication) ถูกพัฒนาขึ้นเพื่อแก้ปัญหา SSL/TLS ในการโฮสต์แบบ Name-based
การโฮสต์เสมือน (Virtual Hosting) คือวิธีการที่ช่วยให้เซิร์ฟเวอร์เครื่องเดียว (หรือกลุ่มของเซิร์ฟเวอร์) สามารถรองรับและจัดการชื่อโดเมนได้หลายชื่อพร้อมกัน โดยแต่ละโดเมนจะมีการจัดการแยกจากกัน วิธีนี้ช่วยให้เซิร์ฟเวอร์สามารถแบ่งปันทรัพยากร เช่น หน่วยความจำ (RAM) และรอบการทำงานของหน่วยประมวลผล (CPU) ได้อย่างมีประสิทธิภาพ โดยไม่จำเป็นต้องให้ทุกบริการที่ให้บริการใช้ชื่อโฮสต์เดียวกัน แม้ว่าคำนี้มักจะถูกใช้ในบริบทของเว็บเซิร์ฟเวอร์ แต่หลักการของการโฮสต์เสมือนสามารถนำไปประยุกต์ใช้กับบริการอินเทอร์เน็ตอื่นๆ ได้เช่นกัน
การประยุกต์ใช้ในการโฮสต์เว็บแบบใช้ร่วมกัน
หนึ่งในการประยุกต์ใช้ที่แพร่หลายที่สุดคือ การโฮสต์เว็บแบบใช้ร่วมกัน (Shared Web Hosting) ซึ่งมีราคาถูกกว่าการเช่าเซิร์ฟเวอร์ส่วนตัว (Dedicated Server) เนื่องจากลูกค้าหลายรายสามารถใช้เซิร์ฟเวอร์เครื่องเดียวกันได้ นอกจากนี้ องค์กรเดียวอาจต้องการใช้หลายชื่อโดเมนบนเครื่องเดียวกันเพื่อให้ชื่อเหล่านั้นสะท้อนถึงบริการที่แตกต่างกัน แทนที่จะระบุถึงตำแหน่งที่ตั้งของเซิร์ฟเวอร์
ประเภทของการโฮสต์เสมือน
การโฮสต์เสมือนแบ่งออกเป็นสองประเภทหลักตามวิธีการที่เซิร์ฟเวอร์ใช้ระบุว่าควรส่งเนื้อหาของเว็บไซต์ใดให้แก่ผู้ใช้:
1. การโฮสต์เสมือนแบบอิงตามชื่อ (Name-based Virtual Hosting)
การโฮสต์แบบอิงตามชื่อจะใช้ชื่อโฮสต์ที่ส่งมาจากไคลเอนต์ (เช่น เว็บเบราว์เซอร์) เพื่อระบุเว็บไซต์ที่ต้องการ วิธีนี้ช่วยประหยัดที่อยู่ IP และลดภาระในการบริหารจัดการ
- กลไกการทำงาน: ต้องอาศัยเว็บเบราว์เซอร์ที่รองรับ HTTP/1.1 ซึ่งจะส่ง Host HTTP header ไปพร้อมกับคำขอ เพื่อให้เซิร์ฟเวอร์ที่โฮสต์หลายไซต์ภายใต้ IP เดียวกันสามารถส่งเนื้อหาของไซต์ที่ถูกต้องกลับไปได้
- ตัวอย่าง: หากเซิร์ฟเวอร์มี IP เดียวกันแต่รองรับทั้ง
www.example.comและwww.example.netเมื่อมีการขอข้อมูลจากwww.example.comเซิร์ฟเวอร์จะดึงไฟล์จากไดเรกทอรีหนึ่ง และหากขอจากwww.example.netจะดึงจากอีกไดเรกทอรีหนึ่ง - ข้อจำกัด: ปัญหาหลักคือการใช้งานร่วมกับ SSL/TLS เนื่องจากขั้นตอนการทำ Handshake เกิดขึ้นก่อนที่ชื่อโฮสต์จะถูกส่ง อย่างไรก็ตาม ปัญหานี้ได้รับการแก้ไขด้วยส่วนขยาย Server Name Indication (SNI) ซึ่งช่วยให้ไคลเอนต์ส่งชื่อโฮสต์ตั้งแต่เริ่มการเชื่อมต่อ (ยกเว้นในเบราว์เซอร์รุ่นเก่ามาก เช่น Internet Explorer บน Windows XP)
2. การโฮสต์เสมือนแบบอิงตาม IP (IP-based Virtual Hosting)
การโฮสต์แบบอิงตาม IP จะกำหนดให้แต่ละเว็บไซต์ (หรือกลุ่มของชื่อโฮสต์) มีที่อยู่ IP เป็นของตัวเอง
- กลไกการทำงาน: เว็บเซิร์ฟเวอร์จะถูกกำหนดค่าให้มีอินเทอร์เฟซเครือข่ายหลายตัว หรือมีหลาย IP บนอินเทอร์เฟซเดียว เซิร์ฟเวอร์จะใช้ที่อยู่ IP ที่ได้รับคำขอเพื่อตัดสินใจว่าจะส่งเนื้อหาของเว็บไซต์ใด
- ข้อดี: ไม่มีความจำเป็นต้องพึ่งพาข้อมูลจากไคลเอนต์ จึงไม่มีปัญหาเรื่องความเข้ากันได้ของโปรโตคอล
- ข้อเสีย: ต้องใช้ที่อยู่ IP จำนวนมาก ซึ่งเพิ่มภาระในการบริหารจัดการและส่งผลต่อการขาดแคลนที่อยู่ IPv4
การผสมผสานระหว่าง Name-based และ IP-based
ในทางปฏิบัติ เซิร์ฟเวอร์อาจใช้ทั้งสองวิธีร่วมกัน เช่น การมีหลาย IP และในแต่ละ IP นั้นก็รองรับหลายชื่อโดเมน เทคนิคนี้มีประโยชน์อย่างยิ่งเมื่อใช้ SSL/TLS ร่วมกับใบรับรองแบบ Wildcard (เช่น .example.com และ .example.net) ซึ่งอาจต้องใช้ IP แยกกันสำหรับโดเมนหลักที่ต่างกัน แต่ใช้ IP เดียวกันสำหรับซับโดเมนภายใต้โดเมนหลักนั้นๆ
คำถามที่พบบ่อย
การโฮสต์เสมือนแตกต่างจากการโฮสต์แบบใช้ร่วมกัน (Shared Hosting) อย่างไร?
การโฮสต์เสมือนเป็น 'เทคโนโลยี' หรือ 'วิธีการ' ที่ทำให้เซิร์ฟเวอร์หนึ่งเครื่องรองรับหลายโดเมนได้ ส่วน Shared Hosting เป็น 'รูปแบบธุรกิจ' ที่นำเทคโนโลยีการโฮสต์เสมือนมาใช้เพื่อให้ลูกค้าหลายรายแชร์ทรัพยากรเซิร์ฟเวอร์เดียวกันเพื่อลดค่าใช้จ่าย
ทำไมการโฮสต์แบบ Name-based ถึงมีปัญหาเรื่อง SSL/TLS ในตอนแรก?
เพราะในกระบวนการ SSL/TLS Handshake เซิร์ฟเวอร์ต้องส่งใบรับรอง (Certificate) ให้ไคลเอนต์ก่อนที่ไคลเอนต์จะส่งชื่อโฮสต์ (Host header) ทำให้เซิร์ฟเวอร์ไม่รู้ว่าต้องส่งใบรับรองของเว็บไซต์ใด
ข้อดีของการโฮสต์แบบ IP-based คืออะไร?
ข้อดีคือมีความเข้ากันได้สูงและไม่ต้องพึ่งพาการส่งชื่อโฮสต์จากไคลเอนต์ ทำให้ทำงานได้กับทุกโปรโตคอลและไม่มีปัญหาเรื่องการระบุตัวตนของเว็บไซต์ในระดับเครือข่าย
SNI คืออะไรและช่วยได้อย่างไร?
SNI (Server Name Indication) เป็นส่วนขยายของ TLS ที่อนุญาตให้ไคลเอนต์ระบุชื่อโฮสต์ที่ต้องการเชื่อมต่อตั้งแต่ขั้นตอนเริ่มต้นการทำ Handshake ทำให้เซิร์ฟเวอร์สามารถเลือกใบรับรอง SSL ที่ถูกต้องมานำเสนอได้แม้จะใช้ IP เดียวกันสำหรับหลายเว็บไซต์