เมื่อคุณเริ่มเรียนรู้ว่าชื่อโดเมนที่อยู่ IP เว็บเซิร์ฟเวอร์และเว็บไซต์ทั้งหมดเหมาะสมและทำงานร่วมกันได้อย่างไรในบางครั้งอาจสร้างความสับสนหรือหนักใจเล็กน้อย มันตั้งค่าอย่างไรให้ทำงานได้อย่างราบรื่น? โพสต์ถาม & ตอบ SuperUser วันนี้มีคำตอบสำหรับคำถามของผู้อ่านที่อยากรู้อยากเห็น
เซสชันคำถามและคำตอบของวันนี้มาถึงเราโดยได้รับความอนุเคราะห์จาก SuperUser ซึ่งเป็นแผนกย่อยของ Stack Exchange ซึ่งเป็นการรวมกลุ่มเว็บไซต์ถาม & ตอบโดยชุมชน
เอื้อเฟื้อภาพโดย Rosmarie Voegtli (Flickr) .
คำถาม
ผู้ใช้ SuperUser reader3407319 ต้องการทราบว่าเว็บเซิร์ฟเวอร์มีเพียงเว็บไซต์เดียวหรือไม่:
จากสิ่งที่ฉันเข้าใจเกี่ยวกับ DNS และการเชื่อมโยงชื่อโดเมนกับที่อยู่ IP ของเว็บเซิร์ฟเวอร์ที่จัดเก็บเว็บไซต์นั่นหมายความว่าแต่ละเว็บเซิร์ฟเวอร์สามารถมีเว็บไซต์ได้เพียงแห่งเดียวหรือไม่ หากเว็บเซิร์ฟเวอร์มีมากกว่าหนึ่งเว็บไซต์ทุกอย่างจะได้รับการแก้ไขอย่างไรเพื่อให้ฉันสามารถเข้าถึงเว็บไซต์ที่ต้องการได้โดยไม่มีปัญหาหรือเกิดการผสมผสาน
เว็บเซิร์ฟเวอร์มีเว็บไซต์เพียงแห่งเดียวหรือมีมากกว่านั้น?
คำตอบ
Bob ผู้สนับสนุน SuperUser มีคำตอบให้เรา:
โดยพื้นฐานแล้วเบราว์เซอร์จะรวมชื่อโดเมนไว้ในคำขอ HTTP เพื่อให้เว็บเซิร์ฟเวอร์ทราบว่าโดเมนใดถูกร้องขอและสามารถตอบสนองได้
คำขอ HTTP
นี่คือวิธีที่คำขอ HTTP ทั่วไปของคุณเกิดขึ้น:
1. ผู้ใช้ระบุ URL ในรูปแบบ http: // host: port / path
2. เบราว์เซอร์แยกส่วนโฮสต์ (โดเมน) ของ URL และแปลเป็นที่อยู่ IP (ถ้าจำเป็น) ในกระบวนการที่เรียกว่าการแก้ไขชื่อ การแปลนี้สามารถเกิดขึ้นผ่าน DNS แต่ไม่จำเป็นต้อง (ตัวอย่างเช่นไฟล์โฮสต์ภายในบนระบบปฏิบัติการทั่วไปข้าม DNS)
3. เบราว์เซอร์เปิดการเชื่อมต่อ TCP ไปยังพอร์ตที่ระบุหรือตั้งค่าเริ่มต้นเป็นพอร์ต 80 บนที่อยู่ IP นั้น
4. เบราว์เซอร์ส่งคำขอ HTTP สำหรับ HTTP / 1.1 จะมีลักษณะดังนี้:
![]()
ส่วนหัวของโฮสต์เป็นมาตรฐานและจำเป็นใน HTTP / 1.1 ไม่ได้ระบุไว้ในข้อมูลจำเพาะ HTTP / 1.0 แต่เซิร์ฟเวอร์บางเครื่องก็รองรับอยู่ดี
จากที่นี่เว็บเซิร์ฟเวอร์มีข้อมูลหลายส่วนที่สามารถใช้ในการตัดสินใจว่าการตอบสนองควรเป็นอย่างไร โปรดทราบว่าเป็นไปได้ที่เว็บเซิร์ฟเวอร์เดียวจะเชื่อมโยงกับที่อยู่ IP หลายรายการ
- ที่อยู่ IP ที่ร้องขอจากซ็อกเก็ต TCP (ที่อยู่ IP ของไคลเอนต์ก็มีให้ใช้เช่นกัน แต่จะไม่ค่อยใช้และบางครั้งก็ใช้สำหรับการบล็อก / กรอง)
- พอร์ตที่ร้องขอจากซ็อกเก็ต TCP
- ชื่อโฮสต์ที่ร้องขอตามที่ระบุไว้ในส่วนหัวของโฮสต์โดยเบราว์เซอร์ในคำขอ HTTP
- เส้นทางที่ร้องขอ
- ส่วนหัวอื่น ๆ (คุกกี้ ฯลฯ )
อย่างที่คุณสังเกตเห็นการตั้งค่าโฮสติ้งที่ใช้ร่วมกันที่พบบ่อยที่สุดในปัจจุบันทำให้เว็บไซต์หลายแห่งมีที่อยู่ IP เดียว: การรวมพอร์ตโดยปล่อยให้โฮสต์เพื่อแยกความแตกต่างระหว่างเว็บไซต์
สิ่งนี้เรียกว่าไฟล์ โฮสต์เสมือนตามชื่อ ใน Apache-land ในขณะที่ Nginx เรียกพวกเขา ชื่อเซิร์ฟเวอร์ในบล็อกเซิร์ฟเวอร์ และ IIS ต้องการ เซิร์ฟเวอร์เสมือน .
สิ่งที่เกี่ยวกับ HTTPS
HTTPS แตกต่างกันเล็กน้อย ทุกอย่างเหมือนกันขึ้นอยู่กับการสร้างการเชื่อมต่อ TCP แต่หลังจากนั้นจะต้องสร้างอุโมงค์ TLS ที่เข้ารหัส เป้าหมายคือการไม่รั่วไหลข้อมูลใด ๆ เกี่ยวกับคำขอ
ในการตรวจสอบว่าเว็บเซิร์ฟเวอร์เป็นเจ้าของโดเมนนี้จริงเว็บเซิร์ฟเวอร์ต้องส่งใบรับรองที่ลงนามโดยบุคคลที่สามที่เชื่อถือได้ จากนั้นเบราว์เซอร์จะเปรียบเทียบใบรับรองนี้กับโดเมนที่ขอ
สิ่งนี้นำเสนอปัญหา เว็บเซิร์ฟเวอร์จะทราบได้อย่างไรว่าจะส่งใบรับรองของโฮสต์ / เว็บไซต์ใดหากจำเป็นต้องดำเนินการนี้ก่อนที่จะได้รับคำขอ HTTP
ตามเนื้อผ้าปัญหานี้ได้รับการแก้ไขโดยการมีที่อยู่ IP เฉพาะ (หรือพอร์ต) สำหรับทุกเว็บไซต์ที่ต้องใช้ HTTPS เห็นได้ชัดว่าปัญหานี้กลายเป็นปัญหาเมื่อเราใช้ที่อยู่ IPv4 หมด
ป้อน SNI (การระบุชื่อเซิร์ฟเวอร์) ขณะนี้เบราว์เซอร์ส่งชื่อโฮสต์ในระหว่างการเจรจา TLS ดังนั้นเว็บเซิร์ฟเวอร์จึงมีข้อมูลนี้เร็วพอที่จะส่งใบรับรองที่ถูกต้อง ในฝั่งเว็บเซิร์ฟเวอร์การกำหนดค่าจะคล้ายกับวิธีกำหนดค่าโฮสต์เสมือน HTTP
ข้อเสียคือตอนนี้ชื่อโฮสต์ถูกส่งผ่านเป็นข้อความธรรมดาก่อนการเข้ารหัสและข้อมูลรั่วไหลเป็นหลัก โดยปกติถือว่าเป็นการแลกเปลี่ยนที่ยอมรับได้แม้ว่าการพิจารณาชื่อโฮสต์จะถูกเปิดเผยตามปกติในการสืบค้น DNS อย่างไรก็ตาม
จะเกิดอะไรขึ้นหากคุณขอเว็บไซต์ตามที่อยู่ IP เท่านั้น?
สิ่งที่เว็บเซิร์ฟเวอร์ทำเมื่อไม่ทราบว่าโฮสต์เฉพาะที่คุณร้องขอนั้นขึ้นอยู่กับการใช้งานและการกำหนดค่าของเว็บเซิร์ฟเวอร์ โดยทั่วไปจะมีเว็บไซต์ "เริ่มต้น" "รับทั้งหมด" หรือ "ถอยกลับ" ซึ่งจะให้การตอบสนองต่อคำขอทั้งหมดที่ไม่ได้ระบุโฮสต์ไว้อย่างชัดเจน
เว็บไซต์เริ่มต้นนี้อาจเป็นเว็บไซต์อิสระของตนเอง (มักแสดงข้อความแสดงข้อผิดพลาด) หรืออาจเป็นเว็บไซต์อื่น ๆ บนเว็บเซิร์ฟเวอร์ทั้งนี้ขึ้นอยู่กับการตั้งค่าของผู้ดูแลระบบเว็บเซิร์ฟเวอร์
มีสิ่งที่จะเพิ่มคำอธิบาย? ปิดเสียงในความคิดเห็น ต้องการอ่านคำตอบเพิ่มเติมจากผู้ใช้ Stack Exchange ที่เชี่ยวชาญด้านเทคโนโลยีคนอื่น ๆ หรือไม่? ดูกระทู้สนทนาฉบับเต็มได้ที่นี่ .