เหตุใดการพิมพ์ที่อยู่ IP แทนชื่อโดเมนที่เกี่ยวข้องไม่แสดงเว็บไซต์ [ปิด]


38
> host example.com
example.com has address 93.184.216.34
example.com has IPv6 address 2606:2800:220:1:248:1893:25c8:1946

ฉันพิมพ์93.184.216.34แทนhttp://example.comใน Chrome ไม่โหลดเว็บไซต์ ทำไม?


โดยทั่วไปแล้วมนุษย์ไม่ควรใช้ที่อยู่ IP เว้นแต่ว่าจะกำหนดค่าเซิร์ฟเวอร์จริง
David Richerby

ควรเน้นว่าคุณได้รับการตอบกลับจากเซิร์ฟเวอร์: การตอบกลับ HTTP 404 ซึ่งหมายความว่ามันประสบความสำเร็จในการพบโฮสต์ (คอมพิวเตอร์ที่อยู่อีกด้านหนึ่ง) และเว็บเซิร์ฟเวอร์บางตัว (ฉันเดาว่ามีบางอย่างที่โอเพนซอร์สที่ใช้งานบน Linux เช่น Nginx) ที่ทำงานบนโฮสต์นั้นส่งข้อมูลกลับมา
jpmc26

คำตอบ:


107

เพราะHostส่วนหัวHTTP ที่เหมาะสมมักจะต้องได้รับเว็บไซต์ที่ตั้งใจจริง

เป็นเรื่องธรรมดามากที่จะโฮสต์เว็บไซต์หลายแห่งในที่อยู่ IP เดียวกันและแยกแยะระหว่างเว็บไซต์เหล่านั้นตามHostส่วนหัวHTTP ที่ระบุโดยไคลเอนต์ (รวมถึงค่า TLS SNI ในปัจจุบันในกรณีของ HTTPS)

นั่นคือเมื่อคุณป้อนhttp://example.comลงในเบราว์เซอร์ของคุณHostส่วนหัวเป็นแต่ที่ไม่ได้เป็นกรณีที่เมื่อคุณป้อนexample.com 93.184.216.34คุณเข้าถึงเว็บเซิร์ฟเวอร์เดียวกันในทั้งสองกรณี แต่คุณได้รับการตอบกลับที่แตกต่างกัน (ในกรณีนี้ 200 กับ 404)


4
มีใครบ้างที่สามารถขยายสิ่งเล็ก ๆ น้อย ๆHostและสิ่งที่เว็บเซิร์ฟเวอร์โดยทั่วไปจะใช้เพื่อ? มันยากที่จะค้นหาออนไลน์เพราะคำนั้นมากเกินไป
1717828

1
tools.ietf.org/html/rfc7230#section-5.4 เซิร์ฟเวอร์ http ประมวลผลส่วนหัวของโฮสต์ แต่ต้องการ httpd ตัวอย่างเช่นมีคำสั่งกำหนดค่า VirtualHost
John Mahowald

19
@SergiyKolodyazhnyy แน่นอน คุณสามารถcurl -H "Host: example.com" http://93.184.216.34/หรืออะไรแบบนั้น
Håkan Lindqvist

13
ในการถอดความ - "ไม่มีความสัมพันธ์แบบหนึ่งต่อหนึ่งระหว่าง URL สำหรับเว็บไซต์และที่อยู่ IP"
Pete

1
ในความเป็นจริงนั้นเซิร์ฟเวอร์เฉพาะ (93.184.216.34 2606: 2800: 220: 1: 248: 1893: 25c8: 1946) จัดการอย่างน้อยที่ example.com example.net example.org example.eduอยู่เดียวกัน (es) ซึ่งเป็นเหตุผลว่าทำไมมันต้องการชื่อในส่วนหัวของโฮสต์
dave_thompson_085

14

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

ตัวอย่างเช่นเว็บเซิร์ฟเวอร์Apacheสามารถตอบกลับคำขอ HTTP ของคุณด้วยที่อยู่ IP โดยใช้หัวข้อนี้:

<VirtualHost *:80>
ServerName Default
...
</VirtualHost>

หรือถ้าไม่มี VirtualHost ใช้ในการกำหนดค่าเลย

ฟีเจอร์ VirtualHost ใน Apache เปิดตัวในปี 1996


10

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

ตัวอย่างเซิร์ฟเวอร์ HTTP ที่มีโฮสต์เสมือนสองโฮสต์ example1.com และ example2.com สามารถมีลักษณะเช่นนี้ (คำจำกัดความที่อยู่ IP):

<VirtualHost 93.184.216.34:80>
  ServerName example1.com
  ServerAlias www.example1.com
  DocumentRoot /var/www/example1.com
</VirtualHost>

<VirtualHost 93.184.216.34:80>
  ServerName example2.com
  ServerAlias www.example2.com
  DocumentRoot /var/www/example2.com
</VirtualHost>

นอกจากนี้ยังสามารถมีลักษณะเช่นนี้ (นิยามตามชื่อ):

<VirtualHost *:80>
  ServerName example1.com
  ServerAlias www.example1.com
  DocumentRoot /var/www/example1.com
</VirtualHost>

<VirtualHost *:80>
  ServerName example2.com
  ServerAlias www.example2.com
  DocumentRoot /var/www/example2.com
</VirtualHost>

ในทั้งสองกรณีบันทึกโฮสต์เสมือนสองรายการจะถูกสร้างขึ้นภายในหน่วยความจำและใช้โดย Apache เพื่อเปรียบเทียบกับเมื่อมีคำขอ URI มาถึง

เมื่อผู้ใช้พิมพ์ที่อยู่ IP ผ่านตัวแทนผู้ใช้โฮสต์เสมือนแรกที่ปรากฏในไฟล์การกำหนดค่าจะใช้เป็นโดเมนหลัก (เช่นในกรณีนี้ example1.com)

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

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


8

ฉันชอบใช้คำศัพท์ "บ้าน"

คุณสามารถส่งจดหมายถึงบ้านได้ง่ายๆโดยไม่มีชื่อและมันจะมาถึงบ้าน

หากคุณใส่ชื่อบุคคลนั้นคุณจะส่งถึงผู้รับที่ต้องการ

ปลายทางเหมือนกัน แต่จะจัดการอย่างไรเมื่อมาถึงบ้านแตกต่างกัน

เมื่อคุณระบุไซต์คือ www.example.com เซิร์ฟเวอร์จะรู้วิธีจัดการกับคำขอและโฮสต์ใดที่มีไว้สำหรับและไซต์ใดที่จะให้บริการกลับ


นี่คืออุปมาที่เป็นประโยชน์!
โปรแกรม Redwolf เมื่อ

+1 ฉันชอบไอเดียของชื่อผู้รับ ฉันกำลังคิดของการเปรียบเทียบที่คล้ายกัน แต่ด้วยที่อยู่ IP ระบุอาคารทางกายภาพ (คอมพิวเตอร์) แต่หมายเลขอพาร์ทเมนต์ (ชื่อโดเมน) ระบุผู้รับจริงในอาคารที่มีผู้เช่าหลายคน แน่นอนว่านี่คือการทำให้เข้าใจง่ายและคอมพิวเตอร์ที่มีผู้ใช้หลายคนอาจมีไซต์เริ่มต้นสำหรับ IP เท่านั้น แต่ฉันคิดว่านี่เป็นการเปรียบเทียบที่ดี
jmbertucci

0

คำสำคัญในการค้นหาคือ "ชื่อโฮสต์เสมือน"

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

เริ่มแรกการโฮสต์เสมือนทำได้โดยการจัดสรรที่อยู่ IP หลายแห่งให้กับเซิร์ฟเวอร์เซิร์ฟเวอร์อาจส่งเนื้อหาต่าง ๆ ตามที่อยู่ IP ที่ใช้ แต่สิ่งนี้ถือว่าสิ้นเปลือง

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


"แต่สิ่งนี้ถูกมองว่าไร้ประโยชน์" สำหรับการเชื่อมต่อ v4 รุ่นเก่าเท่านั้น ตอนนี้มันค่อนข้างเป็นไปได้ที่จะตั้งค่าโฮสต์เสมือนทุกอันในที่อยู่ v6 ที่แตกต่าง
Qwertie

1
เรายังห่างไกลจากจุดที่ทำให้บริการสาธารณะของคุณ IPv6 เท่านั้นเป็นสิ่งที่ควรทำ
Peter Green

0

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

Vhost จะดูที่อยู่เว็บไซต์ที่เข้ามาและเปรียบเทียบกับชื่อเซิร์ฟเวอร์หรือชื่อเซิร์ฟเวอร์เซิร์ฟเวอร์ในไฟล์ Vhosts ที่เปิดใช้งาน หากหนึ่งในนั้นตรงกับที่โหลดเว็บไซต์เฉพาะ

เว้นแต่เว็บไซต์จะมีการโหลดจำนวนมาก (จำนวนผู้เข้าชม / การดูหน้าเว็บที่ไม่ซ้ำกันจำนวนมาก) หรือขับเคลื่อนแอปพลิเคชั่นที่โหลดสูง (คิดว่า youtube.com, facebook เป็นต้น) อาจจะคุ้มค่ากว่าในการทำงานบนเซิร์ฟเวอร์ที่ใช้ร่วมกัน มันจะเสียเงินเพื่อให้ตัวเองเป็นเซิร์ฟเวอร์เฉพาะ (เริ่มต้นที่ $ 60 / เดือน) เพียงเพื่อเรียกใช้เว็บไซต์บล็อก Wordpress คุณควรใช้แพลตฟอร์มที่ใช้ร่วมกันบนเซิร์ฟเวอร์ที่มีเว็บไซต์มากกว่า 200 แห่งบนเซิร์ฟเวอร์เดียว ค่าใช้จ่ายจะมากขึ้นในพื้นที่ $ 5 / เดือน

เหตุผลในการทำเช่นนี้ก็คือการขาดที่อยู่ IP มีที่อยู่ IPv4 เหลืออยู่ไม่เพียงพอ มันเป็นเพียงการใช้ NAT สำหรับเครือข่ายในบ้าน / ธุรกิจและการใช้ Vhosts ที่เรามีเหลืออยู่เลย แม้ว่า IPv6 จะกลายเป็นสตรีมหลักเซิร์ฟเวอร์ก็อาจติดกับ Vhosts (ต้นทุนเซิร์ฟเวอร์)


0

ที่อยู่ IP เฉพาะนั้นมีราคาแพงในขณะที่การสร้างเว็บไซต์ใหม่บนเซิร์ฟเวอร์นั้นฟรี

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

คิดเหมือนตู้ไปรษณีย์ถ้าคุณเพียงแค่จดที่อยู่ที่ทำการไปรษณีย์ แต่ไม่มีหมายเลขกล่องจดหมายจะไม่ถูกส่ง


0

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

ฉันพูดว่า "มักจะ" เพราะมันทำแบบนี้เกือบทุกครั้ง แต่ในความเป็นจริงมีวิธีที่คุณสามารถตั้งค่าเซิร์ฟเวอร์ http เพื่อตอบถ้ามีการใช้ที่อยู่ IP เท่านั้น


-1

เราจำเป็นต้องเข้าใจความแตกต่างระหว่าง IP เสมือนและ IP เฉพาะ

หากเว็บไซต์มีIP เฉพาะ (ไม่แบ่งปัน) ดังนั้น (ตัวอย่าง) http://123.456.789.012จะแสดงเว็บไซต์ขึ้นมา

ลองใช้นี่ซึ่งเป็นที่อยู่ IP เฉพาะของเว็บไซต์ที่ฉันเป็นเจ้าของ www.negativeiongenerators.com: http://75.126.128.174 แต่อย่างที่คนอื่นพูด


1
สิ่งนี้ไม่เป็นความจริงในระดับสากล ขึ้นอยู่กับการกำหนดค่าเว็บเซิร์ฟเวอร์ คุณสามารถมีที่อยู่ IP เฉพาะและยังไม่ตอบสนองต่อ IP โดยไม่มีโฮสต์และคุณสามารถมีที่อยู่ IP ที่ใช้ร่วมกันและมีที่อยู่ IP ชี้ไปที่หนึ่งในเว็บไซต์บนเซิร์ฟเวอร์ นอกจากนี้ยังไม่มีอะไรผิดปกติในการอนุญาตให้เข้าถึงเว็บไซต์ผ่านทางที่อยู่ IP เพียงอย่างเดียวแม้ว่าจะไม่เป็นประโยชน์
Qwertie
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.