Do máy chủ web chỉ giữ một trang web mỗi?
Khi bạn lần đầu tiên bắt đầu tìm hiểu làm thế nào tên miền, địa chỉ IP, máy chủ web và trang web phù hợp và hoạt động cùng nhau, đôi khi có thể hơi khó hiểu hoặc quá tải. Làm thế nào là tất cả được thiết lập để làm việc trơn tru như vậy? Bài hỏi và trả lời của SuperUser hôm nay có câu trả lời cho câu hỏi của người đọc tò mò.
Phiên hỏi và trả lời hôm nay đến với chúng tôi nhờ sự hỗ trợ của SuperUser - một phân ngành của Stack Exchange, một nhóm các trang web Hỏi & Đáp do cộng đồng điều khiển.
Hình ảnh lịch sự của Rosmarie Voegtli (Flickr).
Câu hỏi
Trình đọc SuperUser user3407319 muốn biết nếu các máy chủ web chỉ giữ một trang web mỗi trang:
Dựa trên những gì tôi hiểu về DNS và liên kết một tên miền với địa chỉ IP của máy chủ web, một trang web được lưu trữ trên đó, điều đó có nghĩa là mỗi máy chủ web chỉ có thể giữ một trang web? Nếu các máy chủ web giữ nhiều hơn một trang web, thì làm thế nào để tất cả được giải quyết để tôi có thể truy cập trang web tôi muốn mà không gặp sự cố hoặc trộn lẫn?
Do các máy chủ web chỉ giữ một trang web mỗi trang web, hoặc họ giữ nhiều hơn?
Câu trả lời
Bob cộng tác viên SuperUser có câu trả lời cho chúng tôi:
Về cơ bản, trình duyệt bao gồm tên miền trong yêu cầu HTTP để máy chủ web biết tên miền nào được yêu cầu và có thể phản hồi tương ứng.
Yêu cầu HTTP
Đây là cách yêu cầu HTTP điển hình của bạn xảy ra:
1. Người dùng cung cấp một URL, ở dạng http: // host: port / path.
2. Trình duyệt trích xuất phần máy chủ (tên miền) của URL và dịch nó thành địa chỉ IP (nếu cần) trong một quy trình được gọi là phân giải tên. Bản dịch này có thể xảy ra thông qua DNS, nhưng nó không phải (ví dụ: tệp máy chủ cục bộ trên các hệ điều hành phổ biến bỏ qua DNS).
3. Trình duyệt mở kết nối TCP đến cổng được chỉ định hoặc mặc định là cổng 80 trên địa chỉ IP đó.
4. Trình duyệt gửi yêu cầu HTTP. Đối với HTTP / 1.1, nó trông như thế này:
Tiêu đề máy chủ là tiêu chuẩn và được yêu cầu trong HTTP / 1.1. Nó không được chỉ định trong thông số HTTP / 1.0, nhưng một số máy chủ vẫn hỗ trợ nó.
Từ đây, máy chủ web có một số thông tin mà nó có thể sử dụng để quyết định phản hồi sẽ là gì. Lưu ý rằng có thể một máy chủ web bị ràng buộc với nhiều địa chỉ IP.
- Địa chỉ IP được yêu cầu, từ ổ cắm TCP (địa chỉ IP của máy khách cũng có sẵn, nhưng điều này hiếm khi được sử dụng và đôi khi để chặn / lọc)
- Cổng được yêu cầu, từ ổ cắm TCP
- Tên máy chủ được yêu cầu, như được chỉ định trong tiêu đề máy chủ của trình duyệt trong yêu cầu HTTP
- Đường dẫn được yêu cầu
- Bất kỳ tiêu đề nào khác (cookie, v.v.)
Như bạn có vẻ đã nhận thấy, thiết lập lưu trữ chia sẻ phổ biến nhất hiện nay đặt nhiều trang web trên một địa chỉ IP: kết hợp cổng, chỉ để máy chủ phân biệt giữa các trang web.
Đây được gọi là Máy chủ ảo dựa trên tên trong vùng đất Apache, trong khi Nginx gọi chúng là Tên máy chủ trong Khối máy chủ và IIS thích Máy chủ ảo.
HTTPS thì sao?
HTTPS là một chút khác nhau. Mọi thứ đều giống hệt với việc thiết lập kết nối TCP, nhưng sau đó, một đường hầm TLS được mã hóa phải được thiết lập. Mục tiêu là không rò rỉ bất kỳ thông tin nào về yêu cầu.
Để xác minh rằng máy chủ web thực sự sở hữu tên miền này, máy chủ web phải gửi chứng chỉ được ký bởi bên thứ ba đáng tin cậy. Trình duyệt sau đó sẽ so sánh chứng chỉ này với tên miền mà nó yêu cầu.
Điều này trình bày một vấn đề. Làm thế nào để máy chủ web biết chứng chỉ máy chủ / trang web nào sẽ gửi nếu cần thực hiện việc này trước khi nhận được yêu cầu HTTP?
Theo truyền thống, điều này đã được giải quyết bằng cách có một địa chỉ IP (hoặc cổng) dành riêng cho mọi trang web yêu cầu HTTPS. Rõ ràng, điều này đã trở nên có vấn đề khi chúng ta đang cạn kiệt địa chỉ IPv4.
Nhập SNI (Chỉ định tên máy chủ). Trình duyệt hiện vượt qua tên máy chủ trong các cuộc đàm phán TLS, vì vậy máy chủ web có thông tin này đủ sớm để gửi chứng chỉ chính xác. Về phía máy chủ web, cấu hình rất giống với cách cấu hình máy chủ ảo HTTP.
Nhược điểm là tên máy chủ hiện được chuyển dưới dạng văn bản thuần túy trước khi mã hóa và về cơ bản là thông tin bị rò rỉ. Đây thường được coi là sự đánh đổi chấp nhận được mặc dù việc xem xét tên máy chủ thường được hiển thị trong truy vấn DNS.
Điều gì sẽ xảy ra nếu bạn yêu cầu một trang web chỉ bằng địa chỉ IP?
Máy chủ web làm gì khi không biết máy chủ cụ thể nào bạn yêu cầu tùy thuộc vào cấu hình và cài đặt của máy chủ web. Thông thường, có một trang web mặc định, các ứng dụng bắt kịp thời, các trang web bắt đầu, các ứng dụng của Google, mặc định, có thể cung cấp phản hồi cho tất cả các yêu cầu không chỉ định rõ ràng máy chủ lưu trữ.
Trang web mặc định này có thể là trang web độc lập của riêng nó (thường hiển thị thông báo lỗi) hoặc có thể là bất kỳ trang web nào khác trên máy chủ web tùy thuộc vào sở thích của quản trị viên máy chủ web.
Có một cái gì đó để thêm vào lời giải thích? Tắt âm thanh trong các ý kiến. Bạn muốn đọc thêm câu trả lời từ những người dùng Stack Exchange am hiểu công nghệ khác? Kiểm tra chủ đề thảo luận đầy đủ ở đây.