Tại sao nhập địa chỉ IP thay vì tên miền tương ứng không hiển thị trang web? [đóng cửa]


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

Tôi gõ 93.184.216.34thay vì http://example.comtrong Chrome. Nó không tải trang web. Tại sao?


Theo nguyên tắc thông thường, con người không bao giờ nên sử dụng địa chỉ IP, trừ khi định cấu hình máy chủ thực tế.
David Richerby

Đáng nhấn mạnh rằng bạn đã nhận được phản hồi từ máy chủ: phản hồi HTTP 404. Điều này có nghĩa là nó đã tìm thấy thành công máy chủ (máy tính ở phía bên kia) và một số máy chủ web (tôi đoán một cái gì đó nguồn mở chạy trên Linux, như Nginx) chạy trên máy chủ đó đã gửi lại dữ liệu.
jpmc26

Câu trả lời:


107

Bởi vì Hosttiêu đề HTTP thích hợp thường được yêu cầu để thực sự có được trang web dự định.

Rất phổ biến để lưu trữ nhiều trang web trên cùng một địa chỉ IP và phân biệt giữa chúng dựa trên Hosttiêu đề HTTP được chỉ định bởi máy khách (cũng như giá trị TLS SNI hiện nay trong trường hợp HTTPS).

Đó là, khi bạn nhập http://example.comvào trình duyệt của bạn, Hosttiêu đề là example.com, nhưng đó không phải là trường hợp khi bạn nhập 93.184.216.34. Bạn tiếp cận cùng một máy chủ web trong cả hai trường hợp, nhưng bạn nhận được các phản hồi khác nhau (trong trường hợp cụ thể này là 200 so với 404).


4
Ai đó có thể mở rộng một chút về những gì Hostkhông và các máy chủ web thường sử dụng nó để làm gì? Thật khó để tìm kiếm trực tuyến vì từ đó quá tải.
dùng1717828

1
tools.ietf.org/html/rfc7230#section-5.4 Máy chủ http xử lý tiêu đề Máy chủ theo cách mà nó muốn. httpd ví dụ có các chỉ thị cấu hình Virtualhost.
John Mahowald

19
@SergiyKolodyazhnyy Chắc chắn. Bạn có thể curl -H "Host: example.com" http://93.184.216.34/hoặc một cái gì đó như thế.
Håkan Lindqvist

13
Để diễn giải - "không có mối quan hệ một-một giữa các URL cho trang web và địa chỉ IP."
Pete

1
Trong thực tế, máy chủ cụ thể đó (93.184.216.34 2606: 2800: 220: 1: 248: 1893: 25c8: 1946) xử lý ít nhất example.com example.net example.org example.edu trên cùng một địa chỉ, đó là lý do tại sao nó thực sự cần tên trong tiêu đề Máy chủ.
dave_thndry_085

14

Bởi vì thông thường các máy chủ web sử dụng công nghệ "máy chủ ảo" và có thể trả lời yêu cầu HTTP của bạn trong chính xác tên miền bạn yêu cầu, nhưng không phải là địa chỉ IP của máy chủ web. Nhờ ẩn nhiều tên miền trên một địa chỉ IP.

Ví dụ: máy chủ web Apache có thể đáp ứng yêu cầu HTTP của bạn bằng địa chỉ IP bằng cách sử dụng phần:

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

hoặc nếu không có Virtualhost được sử dụng trong cấu hình.

Tính năng Virtualhost trong Apache được giới thiệu vào năm 1996.


10

Trong Apache , bạn có thể lưu trữ nhiều trang web chỉ bằng một địa chỉ IP duy nhất. Đây được gọi là lưu trữ ảo. Đó là cách tên miền phụ có thể được tạo, thậm chí cả tên miền độc lập. Điều này được thực hiện bằng cách thiết lập tệp cấu hình Apache chứa các chỉ thị Virtualhost cho mỗi tên miền / tên miền phụ.

Một máy chủ HTTP mẫu có hai máy chủ ảo, example1.com và example2.com có ​​thể trông như thế này (định nghĩa địa chỉ 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>

Nó cũng có thể trông như thế này (định nghĩa dựa trên tên):

<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>

Trong cả hai trường hợp, hai bản ghi máy chủ ảo được tạo bên trong bộ nhớ và được Apache sử dụng để so sánh khi có yêu cầu URI.

Khi người dùng nhập địa chỉ IP thông qua tác nhân người dùng, máy chủ ảo đầu tiên được liệt kê trong tệp cấu hình được sử dụng làm tên miền chính (ví dụ trong trường hợp này là example1.com).

Khi người dùng nhập tên miền, yêu cầu được gửi đến mạng DNS Internet công cộng (ICANN) cung cấp địa chỉ IP được liên kết với nó. Bạn đã đăng ký cả hai thông qua một công ty đăng ký ICANN (như GoDaddy). Bạn phải có cả hai điều này đúng và dành một chút thời gian trước khi việc truyền bá được giữ cho tất cả các máy chủ DNS trên mạng ICANN. Những ngày này có thể mất đến 24 giờ.

Khi yêu cầu được chuyển đến máy chủ HTTP Apache của bạn, địa chỉ IP và tên miền được khớp với danh sách các bản ghi Virtualhost nội bộ. Khi tìm thấy một, tài liệu gốc được sử dụng để tạo đường dẫn hệ thống tập tin đầy đủ đến tài nguyên đối tượng để trả về tác nhân người dùng. Nếu không, HTTP 404 được gửi cùng với bất kỳ tài liệu lỗi nào liên quan đến nó.


8

Tôi thích sử dụng thuật ngữ "nhà".

Bạn có thể dễ dàng gửi thư đến một ngôi nhà mà không có tên trên đó và nó sẽ đến nhà.

Nếu bạn đặt tên của người đó trên đó thì bạn sẽ gửi cho người nhận.

Điểm đến là như nhau nhưng cách xử lý khi đến nhà thì khác.

Khi bạn chỉ định trang web, tức là www.example.com thì máy chủ sẽ biết cách xử lý yêu cầu và máy chủ nào được dự định và trang web nào sẽ phục vụ lại.


Đây là một phép ẩn dụ hữu ích!
Chương trình Redwolf

+1 Tôi thích ý tưởng về tên người nhận. Tôi đã nghĩ về một sự tương tự tương tự nhưng với Địa chỉ IP xác định tòa nhà vật lý (máy tính) nhưng số căn hộ (tên miền) xác định người nhận thực tế trong các tòa nhà nhiều bên. Tất nhiên, đây là một máy tính đơn giản hóa quá mức và nhiều máy tính có thể có máy chủ địa chỉ IP chỉ là một trang mặc định, nhưng tôi nghĩ đây là một sự tương tự tốt.
jmbertucci

0

Thuật ngữ chính để tìm kiếm là "lưu trữ ảo dựa trên tên".

Mọi người muốn phân bổ nhiều tên máy chủ cho cùng một máy chủ web và phục vụ nội dung khác nhau cho mỗi tên máy chủ. Điều này được gọi là lưu trữ ảo (không nên nhầm lẫn với khái niệm gần đây hơn về máy ảo).

Ban đầu lưu trữ ảo được thực hiện bằng cách phân bổ nhiều địa chỉ IP cho máy chủ, máy chủ sau đó có thể gửi nội dung khác nhau dựa trên địa chỉ IP được sử dụng, nhưng điều này được coi là lãng phí.

Do đó, tiêu đề "máy chủ" đã được giới thiệu, ban đầu là một phần mở rộng nhưng sau đó đã thực hiện một phần bắt buộc của đặc tả http 1.1 vào năm 1997. Tiêu đề này chỉ định tên máy chủ mà khách hàng yêu cầu. Sau đó, máy chủ có thể phân phát nội dung khác nhau dựa trên giá trị của tiêu đề.


"Nhưng điều này được coi là lãng phí." Chỉ dành cho các kết nối v4 cũ. Bây giờ hoàn toàn có thể thiết lập mọi máy chủ ảo trên một địa chỉ v6 khác nhau.
Qwertie

1
Chúng tôi vẫn còn một chặng đường dài từ thời điểm làm cho các dịch vụ giao tiếp công khai của bạn chỉ là một điều hợp lý.
Peter Green

0

Để giảm chi phí cho máy chủ web, rất nhiều máy chủ web lưu trữ nhiều trang web. Họ làm điều này bằng cách sử dụng máy chủ ảo hoặc Vhost, trong apache2 / nginx / vv. Vì vậy, nếu bạn truy cập trực tiếp vào Địa chỉ IP của trang web, rất có thể bạn sẽ nhận được màn hình "Apache đang hoạt động" hoặc thậm chí có thể được chuyển hướng đến trang web chính của máy chủ web.

Một Vhost xem địa chỉ trang web đến và so sánh nó với tên ServerName hoặc ServerAlias ​​trong các tệp Vhost được kích hoạt. Nếu một trong số chúng khớp, trang web cụ thể đó được tải.

Trừ khi trang web có tải trọng lớn (số lượng khách truy cập / lượt xem trang lớn) hoặc điều khiển các ứng dụng tải cao (nghĩ youtube.com, facebook, v.v.), có lẽ sẽ hiệu quả hơn khi vận hành trên máy chủ dùng chung. Sẽ là lãng phí tiền bạc để có cho mình một máy chủ chuyên dụng (bắt đầu từ $ 60 / tháng) chỉ để chạy một trang web blog Wordpress. Tốt hơn hết là bạn nên có một nền tảng được chia sẻ trên một máy chủ có hơn 200 trang web trên một máy chủ. Chi phí sẽ nhiều hơn trong khu vực $ 5 / tháng.

Một lý do khác để làm điều này là thiếu địa chỉ IP. Đơn giản là không đủ địa chỉ IPv4 còn lại. Chỉ thông qua việc sử dụng NAT cho mạng gia đình / doanh nghiệp và việc sử dụng Vhost mà chúng tôi còn lại. Ngay cả khi IPv6 trở thành luồng chính, các máy chủ có thể sẽ dính vào Vhost (chi phí máy chủ).


0

Một địa chỉ IP chuyên dụng rất tốn kém, trong khi việc tạo một trang web mới trên máy chủ về cơ bản là miễn phí.

Điều xảy ra là công ty lưu trữ thuê một địa chỉ IP duy nhất trỏ đến một máy chủ vật lý, sau đó lưu trữ hàng ngàn trang web trên địa chỉ IP đó bằng tính năng "máy chủ ảo"

Hãy suy nghĩ như một Hộp thư bưu điện, nếu bạn chỉ ghi địa chỉ bưu điện nhưng không có số hộp, thư sẽ không được gửi.


0

Có rất nhiều câu trả lời ở đây với chi tiết kỹ thuật, nhưng tôi nghĩ rằng lời giải thích cấp cao đơn giản nhất là ngay cả khi một máy chủ web đang lắng nghe lưu lượng http trên địa chỉ IP của nó, thì máy chủ cũng thường phải được cấu hình để trả lời cho một tên miền cụ thể Tên và tên đó phải có trong yêu cầu được gửi bởi khách hàng (tức là trình duyệt web)

Tôi nói "thông thường" bởi vì nó hầu như luôn được thực hiện theo cách này, nhưng thực tế có những phương pháp mà bạn có thể thiết lập máy chủ http để trả lời nếu chỉ sử dụng địa chỉ IP.


-1

Chúng ta cần hiểu sự khác biệt giữa IP ảo và IP chuyên dụng.

Nếu một trang web có IP chuyên dụng (không chia sẻ), thì (ví dụ) http://123.456.789.012 sẽ đưa lên trang web.

Hãy thử cái này, đó là địa chỉ IP chuyên dụng của một trang web mà tôi sở hữu, www.negativeiongenerators.com: http://75.126.128.174 Nhưng như những người khác đã nói, nó thường không phải là một ý tưởng tốt.


1
Điều này là không đúng sự thật. Nó phụ thuộc vào cấu hình máy chủ web. Bạn có thể có một địa chỉ IP chuyên dụng mà vẫn không phản hồi IP mà không có máy chủ lưu trữ và bạn cũng có thể có một địa chỉ IP được chia sẻ và có địa chỉ IP trỏ đến một trong các trang web trên máy chủ. Cũng không có gì sai khi cho phép truy cập vào một trang web thông qua địa chỉ IP của nó mặc dù cũng không đặc biệt hữu ích.
Qwertie
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.