Chạy nhiều site trên một server apache
Nguyên tắc của Máy chủ ảo bao gồm chạy một hoặc nhiều máy chủ Web (như company1.example.com và company2.example.com) trên cùng một máy.
Apache là tiền thân của các máy chủ cung cấp phương thức máy chủ ảo này dựa trên địa chỉ IP. Các phiên bản 1.1 trở lên của nó cung cấp hai phương thức của máy chủ ảo: theo IP và theo tên. Phương pháp thứ hai này đôi khi còn được gọi là máy chủ ảo dựa trên máy chủ hoặc không phải IP .
Máy chủ ảo theo IP sử dụng địa chỉ IP của kết nối để xác định máy chủ ảo nào sẽ phản hồi. Do đó, bạn phải có các địa chỉ IP khác nhau cho mỗi máy chủ. Với lưu trữ ảo theo tên, máy chủ dựa vào thông tin được truyền bởi máy khách trong các tiêu đề HTTP của các yêu cầu của nó. Kỹ thuật được trình bày ở đây cho phép bạn chia sẻ các máy chủ ảo khác nhau trên cùng một địa chỉ IP.
Để sử dụng máy chủ ảo theo tên, bạn phải chỉ định địa chỉ IP (và có thể thêm vào cổng nữa) trên máy chủ để chấp nhận yêu cầu tên miền. Cấu hình này sử dụng tệp NameVirtualHost. Trong trường hợp bình thường khi có thể sử dụng bất kỳ địa chỉ IP nào, bạn có thể thêm * làm đối số cho lệnh NameVirtualHost.
Bước tiếp theo là tạo một phần <VirtualHost> cho mỗi máy chủ được tạo. Đối số chỉ thị <VirtualHost> phải giống với đối số chỉ thị NameVirtualHost (trong trường hợp này là "*:80"). Trong mỗi phần <VirtualHost>, bạn phải xác định ít nhất một lệnh ServerName để chỉ định máy chủ có liên quan và một lệnh DocumentRoot để chỉ định vị trí trên hệ thống tệp của nội dung của máy chủ này.
Nếu bạn thêm các máy chủ ảo vào một máy chủ web hiện có, bạn cũng phải tạo một phần <VirtualHost> xác định lại máy chủ hiện có đó. Chỉ thị ServerName và DocumentRoot bao gồm trong máy chủ ảo này phải giống như đối với chỉ thị chung ServerName và DocumentRoot. Đặt máy chủ ảo này đầu tiên trong tệp cấu hình để biến nó thành máy chủ mặc định.
Ví dụ: giả sử bạn lưu trữ tên miền www.domain.tld và muốn thêm máy chủ ảo www.otherdomain.tld trỏ đến cùng một địa chỉ IP. Bạn chỉ cần thêm cấu hình sau vào httpd.conf :
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain
</VirtualHost>
<VirtualHost *:80>
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain
</VirtualHost>
Một số máy chủ có thể truy cập bằng nhiều tên. Chỉ cần đặt chỉ thị ServerAlias trong một phần <VirtualHost>. Ví dụ: trong phần đầu tiên <VirtualHost> ở trên, chỉ thị ServerAlias cho người dùng biết tên thay thế nào được phép truy cập cùng một trang web:
ServerAlias domain.tld *.domain.tld
do đó, tất cả các yêu cầu liên quan đến một miền domain.tld sẽ được phục vụ bởi máy chủ ảo www.domain.tld. Các ký tự đại diện * và ? có thể được sử dụng để khớp. Tất nhiên, bạn không thể đặt tên và đặt chúng trong lệnh ServerName hoặc ServerAlias.