คุณมีที่อยู่ IP เดียวและหลายเว็บไซต์ได้อย่างไร


27

ฉันจะมีที่อยู่ IP เดียวที่อยู่บนอินเทอร์เน็ต แต่มีชื่อเว็บมากมายได้อย่างไร ตัวอย่างเช่นเมื่อ บริษัท ให้บริการพื้นที่มี IP ที่ใช้ร่วมกัน แต่ฉันได้รับชื่อโดเมนไม่ จำกัด (พร้อมกับคนอื่น ๆ ในกล่องนั้น)

ฉันมีกล่องบนอินเทอร์เน็ต แต่ฉันต้องการชี้ไปที่เครื่องอื่นที่เก็บเว็บไซต์อื่นเมื่อมีคนพิมพ์ www ที่แตกต่างกัน ... (มันนั่งถัดจากมันในกล่องอื่น) นั่นคือการย่อยทั้งหมดหรือไม่ ขอขอบคุณ.

ฉันเป็น บริษัท โฮสติ้ง

คำตอบ:


36

เป็นส่วนหนึ่งของโปรโตคอล HTTP 1.1

โพรโทคอล HTTP 1.1 มีส่วนหัวที่เรียกว่า "โฮสต์:" ซึ่งระบุว่าเว็บไซต์ใดบนเซิร์ฟเวอร์เฉพาะที่ไคลเอ็นต์พยายามเข้าถึง

ดังนั้นหาก snoopy.net และ woodstock.org ทั้งคู่แบ่งปัน 192.0.32.10 และเบราว์เซอร์ของคุณพยายามรับเนื้อหาจากhttp://snoopy.net/doghouse คำขอ http เฉพาะจะมีลักษณะดังนี้:

GET /doghouse HTTP/1.1
Host: snoopy.net

หาก URL ที่ต้องการคือhttp://woodstock.org/seedsคำขอจะมีลักษณะ

GET /seeds HTTP/1.1
Host: woodstock.org

ในทั้งสองกรณีจะมีซ็อกเก็ต tcp ระหว่างคอมพิวเตอร์ของคุณและพอร์ต 80 ของเซิร์ฟเวอร์ เซิร์ฟเวอร์รู้ว่าจะรับเนื้อหาจาก /var/www/snoopy.net หรือ /var/www/woodstock.org/ ตามส่วนหัวของโฮสต์

จะมีส่วนหัวอื่น ๆ สำหรับคุกกี้และสิ่งอื่น ๆ เช่นชนิดของเบราว์เซอร์และเนื้อหาที่ได้รับอนุญาต แต่ส่วนหัว "โฮสต์" โดยเฉพาะคือสิ่งที่ช่วยให้เว็บเซิร์ฟเวอร์รู้ว่าต้องการเว็บไซต์เสมือนใด

มีมากขึ้นในRFC2616

นี่คือสาเหตุที่เว็บไซต์ https * ต้อง *** มีที่อยู่ IP ของตัวเอง - การแลกเปลี่ยนคีย์ ssl และการตรวจสอบใบรับรองเกิดขึ้นก่อนการทำธุรกรรม http ดังนั้นเซิร์ฟเวอร์ http จะไม่ทราบว่าจะให้ใบรับรองสำหรับ "woodstock org "หรือ" snoopy.net "เมื่อได้รับการเชื่อมต่อ https บนพอร์ต 443 จาก 192.0.32.10


แก้ไข

** ในความคิดเห็นGrawityชี้ให้เห็นว่ามีส่วนขยายของ SSL ในข้อมูลจำเพาะ TLS ที่อนุญาตให้เซิร์ฟเวอร์ทราบว่าเว็บไซต์ใดที่ผู้ใช้พยายามเข้าถึงและเว็บเบราว์เซอร์ที่ทันสมัยส่วนใหญ่มีส่วนขยายเหล่านี้ดังนั้นจึงต้องเป็นบิตด้วย แข็งแรง


ดังนั้นเว็บเซิร์ฟเวอร์จะเห็นส่วนหัวนั้นและย้ายไปยังเว็บไซต์ที่ถูกต้องหรือไม่ คุณมีหลายเว็บไซต์ในพอร์ตเดียวกันได้ไหม
johnny

1
นั่นคือสิ่งที่มันมีไว้สำหรับ "เซิร์ฟเวอร์" หนึ่งรายการเช่น apache มีพอร์ต 80 จาก 192.0.32.10 ซึ่งมีรายการ DNS จำนวนมากซึ่งแต่ละรายการเป็น "ไซต์" เซิร์ฟเวอร์รู้ว่าไซต์ใดที่ต้องการโดยยึดตามส่วนหัว "โฮสต์"
chris

3
DNS ถูกกำหนดค่าให้ทำให้ทั้งสองชื่อชี้ไปยังที่อยู่ IP เดียวกันซึ่งเซิร์ฟเวอร์กำลังฟังอยู่ เซิร์ฟเวอร์ได้รับการเชื่อมต่อบน IP และพอร์ตเดียวกัน แต่เมื่อเบราว์เซอร์แจ้งว่า "ฉันต้องการ SiteA.com" จะรู้ว่าต้องให้เนื้อหาที่แตกต่างจากเมื่อถามถึง SiteB.com
Massimo

2
เพื่อให้ชัดเจนยิ่งขึ้น: ทั้งสองไซต์มีความแตกต่างที่ระดับโปรโตคอล HTTP ไม่ใช่ระดับ TCP / IP มันเหมือนเมื่อมีคนโทรศัพท์สำนักงานของคุณและขอพูดกับจอห์นหรือซูซาน: หมายเลขโทรศัพท์เหมือนกัน แต่มีมากกว่าหนึ่งคนที่สามารถใช้งานได้
Massimo

1
เว็บเบราว์เซอร์และเซิร์ฟเวอร์ส่วนใหญ่ในขณะนี้รองรับการระบุชื่อเซิร์ฟเวอร์ TLS ซึ่งจะลบข้อกำหนดของที่อยู่ IP หนึ่งรายการต่อเว็บไซต์
grawity

12

มีบางสิ่งที่เบราว์เซอร์ที่ทันสมัยทั้งหมดส่งพร้อมกับคำขอที่เรียกว่า "โฮสต์:" ส่วนหัว

คำขอ Firefox ที่แท้จริงส่งไปยังหน้านี้คือ:

โฮสต์: superuser.com
ตัวแทนผู้ใช้: Mozilla / 5.0 (Windows; U; Windows NT 6.0; en-US; rv: 1.9.1.7) Gecko / 20091221 Firefox / 3.5.7 (.NET CLR 3.5.30729)
ยอมรับ: ข้อความ / html แอปพลิเคชัน / xhtml + xml แอปพลิเคชัน / xml; q = 0.9, * / *; q = 0.8
ยอมรับภาษา: en-us, en; q = 0.5
ยอมรับการเข้ารหัส: gzip, deflate
ยอมรับชุดอักขระ: ISO-8859-1, utf-8; q = 0.7, *; q = 0.7
Keep-Alive: 300
การเชื่อมต่อ: Keep-alive

อย่างที่คุณเห็น

โฮสต์: superuser.com
บิตระบุเว็บไซต์ที่เป็นปัญหา

ใน IIS และ Apache คุณสามารถกำหนดค่าเว็บไซต์เสมือนจริงที่ยอมรับเฉพาะการร้องขอจากชุด IP / โฮสต์เฉพาะ

สำหรับปัญหาเฉพาะของคุณคุณจะต้องอ่านวิธีการที่ บริษัท โฮสติ้งของคุณต้องการให้คุณร้องขอการกำหนดค่า


สิ่งนี้ควรระบุด้วยว่าคุณต้องตั้งค่าหลายรายการ DNS สำหรับที่อยู่ IP ของคุณ
Tadeusz A. Kadłubowski

@Tadeusz: เป็นไปได้ที่จะตั้งค่ารายการ wildcard DNS ดังนั้นจึงไม่จำเป็นอย่างยิ่ง
John Gietzen

6

เทคนิคสำหรับการเป็นเจ้าภาพมากกว่าหนึ่งโดเมน / โดเมนย่อยบน IP เดียวที่อยู่ / โฮสต์ที่เรียกว่าโฮสต์เสมือน http get ร้องขอประกอบด้วยชื่อโดเมนที่ร้องขอนั้นช่วยให้เว็บเซิร์ฟเวอร์จับคู่คำขอกับโดเมนเสมือนเฉพาะ

หากคุณมีโฮสต์ฟิสิคัลหลายโฮสต์ภายในโดยมี IP ภายนอกเพียงตัวเดียวคุณจะต้องตั้งค่าพร็อกซีย้อนกลับเพื่อส่งต่อคำขอไปยังเครื่อง / ที่อยู่ IP ภายในที่ถูกต้อง


หรือคุณสามารถใช้เซิร์ฟเวอร์ http อื่น ๆ ในพอร์ตที่ต่างกันได้
Chopper3

ใช่ว่าเป็นตัวเลือก แต่ผู้คนไม่คุ้นเคยกับการระบุพอร์ตเมื่อพวกเขาพิมพ์ url ดังนั้นฉันจะจองวิธีแก้ปัญหานั้นกับสถานการณ์บางอย่างเช่นอินเทอร์เฟซผู้ดูแลระบบ
3dinfluence

3

โดยปกติคุณสมบัติบนเว็บเซิร์ฟเวอร์ของคุณจะเรียกว่า 'โฮสต์เสมือน' เมื่อคุณชี้รายการ dns ให้ชี้ไปยังที่อยู่ IP นั้น (ตามที่กล่าวไว้ในคำตอบอื่น ๆ ) เซิร์ฟเวอร์จะทำการเซิร์ฟเวอร์ไซต์ต่าง ๆ ขึ้นอยู่กับว่าโฮสต์ที่ร้องขอนั้นคืออะไร

เท่าที่ชี้ไปที่กล่องอื่นไป คุณสามารถกำหนดค่าการเปลี่ยนเส้นทางในเว็บเซิร์ฟเวอร์ส่วนใหญ่หากคุณคาดว่าจะได้รับแบบสอบถามก่อน หากคุณกำลังพูดถึงโดเมนย่อยสิ่งที่คุณต้องทำก็คือชี้โดเมนย่อยแต่ละอันไปยังที่อยู่ IP ที่ต่างกัน

เช่น host.com -> IP 1 จากนั้น www.host.com -> IP 2 และ mail.host.com -> IP 3

หากคุณต้องการคำตอบที่เฉพาะเจาะจงยิ่งขึ้นคุณต้องบอกว่าซอฟต์แวร์เซิร์ฟเวอร์เว็บใดที่คุณใช้งานอยู่

คุณอาจพบว่า ServeFault เป็นสถานที่ที่ดีกว่าสำหรับคำถามนี้


1

ในระยะสั้น ...

หนึ่ง - ตั้งค่ารายการ DNS สำหรับโดเมนต่างๆของคุณให้ชี้ไปที่กล่องของคุณ

สอง - ตามที่คนอื่น ๆ อธิบายไว้ให้ตั้งค่าเว็บเซิร์ฟเวอร์ของคุณ (คุณไม่ได้พูดว่าชื่อใด) เพื่อจับคู่กับชื่อโฮสต์ที่ร้องขอ

วิธีการร้องขอทั้งหมดสำหรับโดเมนทั้งหมดของคุณไปที่เครื่องเดียวกันและการกำหนดค่าจะใช้โดเมนที่ร้องขอและกำหนดเส้นทางไปยังโฟลเดอร์ด้านขวาที่มีเนื้อหาของไซต์นั้น


0

ฟังดูจากคำถามของคุณเหมือนกับว่าคุณมีเซิร์ฟเวอร์แยกต่างหากสำหรับเว็บไซต์ที่สอง ในกรณีนี้คุณจะไม่สามารถใช้ที่อยู่ IP เดียวสำหรับเซิร์ฟเวอร์สองเครื่อง คุณสามารถก) รับที่อยู่ IP สาธารณะที่สองสำหรับโฮสต์ที่สองของคุณหรือ b) ตั้งค่าสมาร์ทพร็อกซี่ที่ส่งต่อการร้องขอไปยังเซิร์ฟเวอร์ต่าง ๆ ในเครือข่ายภายในของคุณตามส่วนหัวของโฮสต์ ฉันค่อนข้างแน่ใจว่า b) เป็นไปได้ แต่ฉันไม่มีความคิดที่แท้จริงเกี่ยวกับวิธีการทำงานดังนั้นคุณจะต้องถามคนอื่นว่าเป็นสิ่งที่คุณพยายามทำหรือไม่


0

ถ้าฉันอ่านคำถามของคุณถูกต้องคุณมีคอมพิวเตอร์สองเครื่องที่ใช้ที่อยู่ IP ร่วมกันผ่าน NAT (การแปลที่อยู่เครือข่าย) หรือไม่ ถ้าเป็นเช่นนั้นคุณจะต้องมีหนึ่งไซต์ที่ฟังบนพอร์ตอื่น (ไม่ใช่ 80) - ไม่มีวิธีที่ดีที่ฉันรู้ว่าจะให้เราเตอร์ส่งคำขอไปยังคอมพิวเตอร์ที่แตกต่างกันโดยใช้ข้อมูลเมตา "โฮสต์" HTTP คุณควรจะได้รับที่อยู่ IP ที่สองสำหรับเซิร์ฟเวอร์ที่สองของคุณ

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