Nhiều website tại một IP:port

Nhờ máy tính nhỏ gọn RPi, việc tạo một website tại nhà trở nên rất đơn giản. Hạn chế về IP động có thể giải quyết dễ dàng bằng cách dùng DNS của cloudflare.com, Free DNS của namecheap.com, DDNS của dynu.com… Nhu cầu tiếp theo là đàng sau một public/WAN IP có thể là nhiều website, trên nhiều webserver /trên nhiều máy tính khác nhau?

Chúng ta xét các trường hợp sau:

  1. Nhiều website trên một webserver
  2. Nhiều website trên nhiều webserver trên một máy tính vật lý
  3. Nhiều website trên nhiều webserver trên nhiều máy tính vật lý

1. Trường hợp nhiều website trên một webserver, giải quyết dễ dàng bằng cách dùng nhiều domain name. Các domain đều trỏ đến IP của RPi, nhưng webserver được thiết lập để mỗi domain trỏ đến một website. Hoặc đơn giản hơn là dùng tên thư mục, https://domain.com/subdir trỏ đến website nằm ở thư mục www/subdir. Nếu muốn đơn giản hóa tên thư mục thì có thể tạo soft link, thí dụ soft link download thay cho thư mục aria2-webui, khi đó https://domain.com/download sẽ thay cho https://domain.com/aria2-webui

2. Nhiều website trên nhiều webserver trên một máy tính vật lý. Giả sử trên máy tính có nhiều website trên webserver Apache. Ngoài cách làm tương tự như trường hợp 1, chúng ta có thể tạo thêm Nginx webserver làm reverse proxy, chắn trước các webserver Apache.

Các website trên Apache trở thành web cục bộ trên các port khác nhau (> 1024). Thí dụ sau, để đơn giản, dùng các local host trên Nginx:

  server {
    listen       8000;
    server_name  _;
    root         /mnt/www/ariaNg;
  }
  server {
    listen       8001;
    server_name  127.0.0.1;
    root         /mnt/www/aria2webui;
  }
  server {
    listen       8002;
    server_name  _;
    root         /mnt/www/wordpress;
    location / {
      try_files $uri $uri/ /index.php?$args;
    }
    include common.conf;
  }

Sau đó cho webserver Nginx lắng nghe trên port 80 hay 443 để chuyển đến các website cục bộ như trên. Thí dụ về Nginx reverse proxy:

server {
  listen       443 ssl;
  server_name  domain.com;
  include ssl.conf;
  #access_log /var/log/nginx/reverse-access.log;
  #error_log /var/log/nginx/reverse-error.log;

  location /dl1/ {
    proxy_pass http://127.0.0.1:8000/;
  }
  location /dl2/ {
    proxy_pass http://127.0.0.1:8001/;
  }
  location /wp/ {
    proxy_pass http://127.0.0.1:8002/;
  }
}

Khi đó chúng ta có các web https://domain.com/dl1, … Ở thí dụ trên các website trên cùng webserver Nginx thì không thấy có sự khác biệt với trường hợp 1.

3. Nhiều website trên nhiều webserver trên nhiều máy tính vật lý

Giải pháp đơn giản là dùng Nginx reverse proxy, ngoài việc chuyển hướng cho các website còn có thể thiết kế để cân bằng tải, chia sẻ tải cho các website giống nhau trên các máy tính khác nhau, khi đó nhiều RPi có thể đảm đương một website lớn.

server {
  listen       443 ssl;
  server_name  domain.com;
  include ssl.conf;
  
  location /dl1/ {
    proxy_pass http://192.168.0.10:8000/;
  }
  location /dl2/ {
    proxy_pass http://192.168.0.10:8001/;
  }
  location /wp/ {
    proxy_pass http://192,168.0.11:8000/;
  }
}

Comments Off on Nhiều website tại một IP:port

Filed under Software

Comments are closed.