Chủ Nhật, 29 tháng 6, 2014

Cấu hình named based virtual host và ip based virtual host

Named based virtual host: Một apache server cho phép host nhiều website có domain name khác nhau trên cùng một IP. Name based virtual host được sử dụng để cung cấp shared hosting.

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  
Cấu hình IP based virtual host:

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.

Không có nhận xét nào:

Đăng nhận xét