> 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.34
thay vì http://example.com
trong Chrome. Nó không tải trang web. Tại sao?
> 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.34
thay vì http://example.com
trong Chrome. Nó không tải trang web. Tại sao?
Câu trả lời:
Bởi vì Host
tiê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 Host
tiê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.com
vào trình duyệt của bạn, Host
tiê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).
Host
khô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.
curl -H "Host: example.com" http://93.184.216.34/
hoặc một cái gì đó như thế.
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ủ.
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.
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ó.
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.
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 đề.
Để 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ủ).
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.
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.
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.