IP based virtual host: Một apache server cho phép host nhiều website có domain khác nhau trên các IP khác nhau.
Cấu hình named based virtual host:
Chuẩn bị
<ServerRoot>/public_html/namebased/web1/index.html
<html><body><h1>Name based: Website 1</h1></body></html>
<ServerRoot>/public_html/namebased/web2/index.html
<html><body><h1>Name based: Website 2</h1></body></html>
<ServerRoot> là thư mục trỏ đến thư mục cài đặt của apache, trực tiếp chứa các thư mục con như conf, bin...
Apache server nằm trên một máy tính có IP được gán trên một interface là 192.168.56.1
Cấu hình để apache server host hai website kể trên:
vi <ServerRoot>/conf/httpd.conf
Listen 8080
<VirtualHost 192.168.56.1:8080>
ServerName web1.namebased.example.com
ServerAlias web1 web1.example.com
ServerAlias *.web1.namebased.example.com
DocumentRoot <ServerRoot>/public_html/namebased/web1/
</VirtualHost>
<VirtualHost 192.168.56.1:8080>
ServerName web2.namebased.example.com
DocumentRoot <ServerRoot>/public_html/namebased/web2/
</VirtualHost>
Nguyên tắc chung của apache (đúng với cả name based và ip based virtualhost) sẽ là:
- Tìm virtual host nào có ip:port phù hợp nhất. Nếu không có virtual host phù hợp thì apache sẽ đọc global server config để phục vụ. (Kiểm tra điều này bằng cách thay đổi tham số ip:port của từng virtualhost ví dụ chuyển hết về thành 192.168.56.1:80)
- Tiếp đến, tìm virtual host có ServerName hoặc ServerAlias khớp với host header của request đến apache. Nếu không tìm thấy thì apache sẽ dùng default virtual host (Là virtual host đầu tiên khớp ip:port). Nếu tìm thấy nhiều hơn một virtual host có ServerName hoặc ServerAlias khớp thì apache dùng virtual host khớp đầu tiên
Chuẩn bị
<ServerRoot>/public_html/ipbased/web1/index.html
<html><body><h1>IP based: Website 1</h1></body></html>
<ServerRoot>/public_html/ipbased/web2/index.html
<html><body><h1>IP based: Website 2</h1></body></html>
Mỗi website khi này cần các IP khác nhau. Tôi không muốn mua thêm NIC (Network Interface Card). Tôi sẽ cấu hình IP alias trên một interface để tăng số IP gán trên interface này.
sudo ifconfig vboxnet0:0 192.168.56.2 up
Kiểm tra lại bằng ifconfig, bạn sẽ thấy có một alias IP 192.168.56.2 gán trên sub interface vboxnet0:0
Để hủy IP alias, bạn dùng:
sudo ifconfig vboxnet0:0 192.168.56.2 down
Cấu hình để apache server host hai website kể trên:
vi <ServerRoot>/conf/httpd.conf
Listen 80
<VirtualHost 192.168.56.1:80>
ServerName web1.ipbased.example.com
DocumentRoot <ServerRoot>/public_html/ipbased/web1/
</VirtualHost>
<VirtualHost 192.168.56.2:80>
ServerName web2.ipbased.example.com
DocumentRoot <ServerRoot>/public_html/ipbased/web2/
</VirtualHost>
Chú ý:
- Apache có thể lắng nghe dịch vụ trên nhiều interface và nhiều port đồng thời.
- Bạn có thể cấu hình /etc/hosts để browser của bạn có thể phân giải tên miền mà không cần đến DNS.