Lưu trữ ảo là một phương thức để lưu trữ nhiều tên miền (với việc xử lý riêng từng tên) trên một máy chủ (hoặc nhóm máy chủ).[1] Điều này cho phép một máy chủ chia sẻ tài nguyên của nó, như chu kỳ bộ nhớ và bộ xử lý, mà không yêu cầu tất cả các dịch vụ được cung cấp để sử dụng cùng tên máy chủ. Thuật ngữ lưu trữ ảo thường được sử dụng để chỉ các máy chủ web nhưng các nguyên tắc thực hiện đối với các dịch vụ internet khác.
Một ứng dụng được sử dụng rộng rãi là chia sẻ lưu trữ web. Giá cho lưu trữ web chia sẻ thấp hơn so với máy chủ web chuyên dụng vì nhiều khách hàng có thể được lưu trữ trên một máy chủ. Một điều rất phổ biến là một thực thể duy nhất muốn sử dụng nhiều tên trên cùng một máy để tên đó có thể phản ánh các dịch vụ được cung cấp thay vì nơi các dịch vụ đó được lưu trữ.
Có hai loại lưu trữ ảo chính, dựa trên tên và dựa trên IP. Tên lưu trữ ảo dựa trên tên sử dụng tên máy chủ được trình bày bởi khách hàng. Điều này giúp tiết kiệm địa chỉ IP và chi phí quản trị liên quan nhưng giao thức được phục vụ phải cung cấp tên máy chủ tại một điểm thích hợp. Đặc biệt, có những khó khăn đáng kể khi sử dụng lưu trữ ảo dựa trên tên với SSL / TLS. Lưu trữ ảo dựa trên IP sử dụng một địa chỉ IP riêng cho mỗi tên máy chủ và nó có thể được thực hiện với bất kỳ giao thức nào nhưng yêu cầu một địa chỉ IP chuyên dụng cho mỗi tên miền được cung cấp. Về nguyên tắc, lưu trữ ảo dựa trên cổng cũng có thể nhưng hiếm khi được sử dụng trong thực tế vì nó không thân thiện với người dùng.
Có thể kết hợp lưu trữ ảo dựa trên tên và IP: một máy chủ có thể có nhiều địa chỉ IP và phục vụ nhiều tên trên một số hoặc tất cả các địa chỉ IP đó. Kỹ thuật này có thể hữu ích khi sử dụng SSL / TLS với chứng chỉ ký tự đại diện. Ví dụ: nếu một nhà điều hành máy chủ có hai chứng chỉ, một cho *.example.com và một cho *.example.net, nhà điều hành có thể phân phát foo.example.com và bar.example.com khỏi cùng một địa chỉ IP một địa chỉ IP riêng cho baz.example.net.
Máy chủ ảo dựa trên tên sử dụng nhiều tên máy chủ cho cùng một địa chỉ IP.
Một điều kiện tiên quyết kỹ thuật cần thiết cho các máy chủ ảo dựa trên tên là trình duyệt web có hỗ trợ HTTP / 1.1 (phổ biến hiện nay) để bao gồm tên máy chủ đích trong yêu cầu. Điều này cho phép một máy chủ lưu trữ nhiều trang web phía sau một địa chỉ IP để cung cấp nội dung của trang web chính xác. Cụ thể hơn, nó có nghĩa là thiết lập tiêu đề HTTP Máy chủ, bắt buộc trong HTTP / 1.1.[2]
Chẳng hạn, một máy chủ có thể nhận được yêu cầu cho hai tên miền, www.example.com và www.example.net, cả hai đều phân giải đến cùng một địa chỉ IP. Đối với www.example.com, máy chủ sẽ gửi tệp HTML từ thư mục /var/www/user/ Joe/site/, trong khi các yêu cầu cho www.example.net sẽ khiến máy chủ phục vụ các trang từ /var/www/user/Mary/site/. Bằng nhau, hai tên miền phụ của cùng một tên miền có thể được lưu trữ cùng nhau. Chẳng hạn, một máy chủ blog có thể lưu trữ cả blog1.example.com và blog2.example.com.
Vấn đề lớn nhất với lưu trữ ảo dựa trên tên là rất khó để lưu trữ nhiều trang web bảo mật chạy SSL / TLS. Vì việc bắt tay SSL / TLS diễn ra trước khi tên máy chủ dự kiến được gửi đến máy chủ, nên máy chủ không biết phải xuất trình chứng chỉ nào trong bắt tay. Có thể một chứng chỉ duy nhất bao gồm nhiều tên thông qua trường "chủ đề" hoặc thông qua ký tự đại diện nhưng ứng dụng thực tế của phương pháp này bị giới hạn bởi các cân nhắc hành chính và bởi các quy tắc phù hợp cho ký tự đại diện. Có một phần mở rộng cho TLS được gọi là Server Name Indication (chỉ định tên máy chủ), trình bày tên khi bắt đầu bắt tay để khắc phục vấn đề đó, ngoại trừ một số máy khách cũ (cụ thể là Internet Explorer trên Windows XP hoặc các phiên bản Android cũ hơn) không triển khai SNI.
Hơn nữa, nếu Hệ thống tên miền (DNS) không hoạt động chính xác, rất khó truy cập vào một trang web hầu như được lưu trữ ngay cả khi địa chỉ IP được biết đến. Nếu người dùng cố gắng quay lại sử dụng địa chỉ IP để liên hệ với hệ thống, như trong http://10.23.45.67/, trình duyệt web sẽ gửi địa chỉ IP làm tên máy chủ. Vì máy chủ web dựa trên máy khách trình duyệt web cho biết tên máy chủ (vhost) sẽ sử dụng, nên máy chủ sẽ phản hồi với một trang web mặc định, thường không phải là trang web mà người dùng mong đợi.
Một cách giải quyết trong trường hợp này là thêm địa chỉ IP và tên máy chủ vào tệp máy chủ của hệ thống máy khách. Truy cập máy chủ với tên miền sẽ hoạt động trở lại. Người dùng nên cẩn thận khi thực hiện việc này, tuy nhiên, vì mọi thay đổi đối với ánh xạ thực giữa tên máy chủ và địa chỉ IP sẽ bị ghi đè bởi cài đặt cục bộ. Cách giải quyết này không thực sự hữu ích cho người dùng web trung bình, nhưng có thể được sử dụng cho quản trị viên trang trong khi sửa các bản ghi DNS.
Khi lưu trữ ảo dựa trên IP được sử dụng, mỗi trang web (tên máy chủ DNS hoặc một nhóm tên máy chủ DNS hoạt động giống nhau) sẽ trỏ đến một địa chỉ IP duy nhất. Máy chủ web được cấu hình với nhiều giao diện mạng vật lý, giao diện mạng ảo trên cùng một giao diện vật lý hoặc nhiều địa chỉ IP trên một giao diện. Máy chủ web có thể mở các ổ cắm nghe riêng cho từng địa chỉ IP hoặc có thể nghe trên tất cả các giao diện với một ổ cắm duy nhất và có được địa chỉ IP mà kết nối TCP đã nhận được sau khi chấp nhận kết nối. Dù bằng cách nào, nó có thể sử dụng địa chỉ IP để xác định trang web nào sẽ phục vụ. Máy khách không tham gia vào quá trình này và do đó (không giống như lưu trữ ảo dựa trên tên) không có vấn đề tương thích.
Nhược điểm của phương pháp này là máy chủ cần một địa chỉ IP khác nhau cho mỗi trang web. Điều này làm tăng chi phí quản trị (cả việc gán địa chỉ cho máy chủ và chứng minh việc sử dụng các địa chỉ đó cho cơ quan đăng ký internet) và góp phần làm cạn kiệt địa chỉ IPv4.
Cổng mặc định cho HTTP là 80. Tuy nhiên, hầu hết các máy chủ web có thể được cấu hình để hoạt động trên hầu hết mọi số cổng, miễn là số cổng không được sử dụng bởi bất kỳ chương trình nào khác trên máy chủ. Có cổng đặc biệt HTTP Secure 443 cần cấu hình đặc biệt (xem Chỉ định tên máy chủ). Các trang web dựa trên cổng được ràng buộc rõ ràng với một số cổng duy nhất và một địa chỉ IP. Trong trường hợp này, địa chỉ IP được sử dụng để lưu trữ nhiều trang web. Số cổng duy nhất được sử dụng cho một địa chỉ IP chung phân biệt một trang web riêng lẻ với các trang web khác được liên kết với cùng một địa chỉ IP.
Circa 1996-1997, the number of distinct IP addresses would have been a good approximation to the number of real sites, since hosting companies would typically allocate an IP address to each site with distinct content, and multiple domain names could point to the IP address being used to serve the same site content. However, with the adoption of HTTP/1.1 virtual hosting, and the availability of load balancing technology it is possible to reliably host a great number of active sites on a single (or relatively few) IP addresses.