เว็บเซิร์ฟเวอร์มีเว็บไซต์เดียวหรือไม่
เมื่อคุณเริ่มเรียนรู้ว่าชื่อโดเมนที่อยู่ IP เว็บเซิร์ฟเวอร์และเว็บไซต์ทั้งหมดเข้ากันได้ดีและทำงานร่วมกันได้อย่างไรอาจทำให้สับสนหรือสับสนเล็กน้อยในบางครั้ง การตั้งค่าให้ทำงานราบรื่นเป็นอย่างไร บทความถามตอบ SuperUser ในวันนี้มีคำตอบสำหรับคำถามของผู้อ่านที่อยากรู้อยากเห็น.
เซสชั่นคำถามและคำตอบในวันนี้มาถึงเราด้วยความอนุเคราะห์จาก SuperUser - แผนกย่อยของ Exchange 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 เรียกชื่อเซิร์ฟเวอร์เหล่านั้นใน Server Blocks และ IIS ต้องการเซิร์ฟเวอร์เสมือน.
เกี่ยวกับ HTTPS?
HTTPS แตกต่างกันเล็กน้อย ทุกอย่างเหมือนกันกับการสร้างการเชื่อมต่อ TCP แต่หลังจากนั้นต้องสร้างช่องสัญญาณ TLS ที่เข้ารหัส เป้าหมายคือไม่รั่วไหลข้อมูลใด ๆ เกี่ยวกับคำขอ.
ในการตรวจสอบว่าเว็บเซิร์ฟเวอร์เป็นเจ้าของโดเมนนี้จริงแล้วเว็บเซิร์ฟเวอร์จะต้องส่งใบรับรองที่ลงนามโดยบุคคลที่สามที่เชื่อถือได้ เบราว์เซอร์จะเปรียบเทียบใบรับรองนี้กับโดเมนที่ขอ.
สิ่งนี้นำเสนอปัญหา เว็บเซิร์ฟเวอร์รู้ได้อย่างไรว่าจะส่งใบรับรองโฮสต์ / เว็บไซต์ใดถ้าจำเป็นต้องทำสิ่งนี้ก่อนที่จะได้รับคำขอ HTTP?
เดิมนี้ได้รับการแก้ไขโดยมีที่อยู่ IP (หรือพอร์ต) เฉพาะสำหรับทุกเว็บไซต์ที่ต้องการ HTTPS เห็นได้ชัดว่านี่เป็นปัญหาเมื่อเราใช้ที่อยู่ IPv4 หมด.
ป้อน SNI (บ่งชี้ชื่อเซิร์ฟเวอร์) เบราว์เซอร์จะส่งชื่อโฮสต์ในระหว่างการเจรจา TLS ดังนั้นเว็บเซิร์ฟเวอร์จะมีข้อมูลนี้เร็วพอที่จะส่งใบรับรองที่ถูกต้อง ทางด้านเว็บเซิร์ฟเวอร์การกำหนดค่านั้นคล้ายกับการกำหนดค่าโฮสต์เสมือน HTTP.
ข้อเสียคือชื่อโฮสต์จะถูกส่งเป็นข้อความธรรมดาก่อนการเข้ารหัสและข้อมูลรั่วไหลเป็นหลัก โดยทั่วไปถือว่าเป็นการแลกเปลี่ยนที่ยอมรับได้แม้ว่าการพิจารณาชื่อโฮสต์นั้นจะเปิดเผยในการสืบค้น DNS ก็ตาม.
จะทำอย่างไรถ้าคุณร้องขอเว็บไซต์ด้วยที่อยู่ IP เท่านั้น?
สิ่งที่เว็บเซิร์ฟเวอร์ทำเมื่อไม่ทราบว่าโฮสต์ที่คุณขอขึ้นอยู่กับการใช้งานและการกำหนดค่าของเว็บเซิร์ฟเวอร์ โดยทั่วไปจะมีเว็บไซต์ "เริ่มต้น", "catch-all" หรือ "ถอยกลับ" ที่ระบุไว้ซึ่งจะให้การตอบสนองต่อคำขอทั้งหมดที่ไม่ได้ระบุโฮสต์อย่างชัดเจน.
เว็บไซต์เริ่มต้นนี้อาจเป็นเว็บไซต์อิสระของตัวเอง (มักแสดงข้อความข้อผิดพลาด) หรืออาจเป็นเว็บไซต์อื่น ๆ บนเว็บเซิร์ฟเวอร์ทั้งนี้ขึ้นอยู่กับการตั้งค่าของผู้ดูแลเว็บเซิร์ฟเวอร์.
มีสิ่งที่จะเพิ่มคำอธิบายหรือไม่ ปิดเสียงในความคิดเห็น ต้องการอ่านคำตอบเพิ่มเติมจากผู้ใช้ Stack Exchange คนอื่นหรือไม่ ลองอ่านหัวข้อสนทนาเต็มได้ที่นี่.