CodeGym /Các khóa học /Docker SELF /Cấu hình virtual hosts

Cấu hình virtual hosts

Docker SELF
Mức độ , Bài học
Có sẵn

Cấu hình virtual hosts

1. Virtual host là gì?

Hãy tưởng tượng bạn mở một quán cà phê ấm cúng. Phần lớn khách hàng đến để thưởng thức cà phê ☕, nhưng đôi khi có người lại gọi trà 🍵. Thay vì mở quán riêng dành cho những người thích trà, bạn chỉ cần dành một góc nhỏ cho họ. Trong thế giới của web server, ý tưởng này được gọi là virtual host. Nó cho phép server của bạn xử lý nhiều trang web (với các domain khác nhau), vẫn giữ nguyên một server vật lý.

Các loại virtual host

  1. Dựa trên địa chỉ IP — mỗi trang web sẽ có địa chỉ IP riêng. Giống như khu vực VIP trong buổi hòa nhạc: mỗi khách có vé VIP sẽ có chỗ riêng của mình.
  2. Dựa trên tên miền — nhiều trang web có thể cùng chia sẻ một địa chỉ IP. Lúc này server sẽ sử dụng tên host (tên miền) trong request của client để hiểu cần hiển thị trang web nào. Đây là phương pháp phổ biến hơn và tiện dụng hơn cho hầu hết các dự án.

2. Cấu hình Virtual Host trong Nginx

1. Tạo Virtual Host mới

Để cấu hình virtual host, trước tiên cần tạo một file cấu hình. File này sẽ chứa thông tin về cách server xử lý các yêu cầu cho một domain cụ thể.

Tạo file cho website của chúng ta, ví dụ example.com:

sudo nano /etc/nginx/sites-available/example.com

Thêm block cấu hình sau:

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example.com;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Phân tích mã từng phần:

  • listen 80;: Chỉ định rằng server sẽ lắng nghe trên port 80 (port mặc định cho HTTP).
  • server_name example.com www.example.com;: Xác định server sẽ phản hồi với những domain nào.
  • root /var/www/example.com;: Chỉ định thư mục gốc nơi lưu trữ file của website.
  • index index.html;: Chỉ định file sẽ được sử dụng làm "trang chính" của website.
  • location / { try_files $uri $uri/ =404; }: Cấu hình định tuyến request. Nếu không tìm thấy file hoặc thư mục, trả về lỗi 404.

2. Kích hoạt cấu hình

Bây giờ chúng ta cần "kích hoạt" virtual host. Trong Nginx, điều này được thực hiện thông qua symbolic links:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Sau đó kiểm tra để đảm bảo không có lỗi cấu hình:

sudo nginx -t

Nếu mọi thứ ổn, khởi động lại server:

sudo systemctl reload nginx

3. Kiểm tra hoạt động

Tạo thư mục cho file của website:

sudo mkdir -p /var/www/example.com
sudo nano /var/www/example.com/index.html

Thêm đoạn mã HTML đơn giản sau:

<h1>Chào mừng bạn đến với example.com!</h1>
<p>Nginx server của bạn đã sẵn sàng.</p>

Lưu file, sau đó mở trên trình duyệt: http://example.com. Nếu thấy thông báo chào mừng, virtual host đã hoạt động!

4. Symbolic links trên Linux

Symbolic links (hoặc soft links, symlinks) là các object file đặc biệt trỏ đến một file hoặc thư mục khác. Chúng hoạt động như "shortcut" trên Windows, cho phép truy cập tới mục tiêu qua một đường dẫn thay thế.

Symbolic links chứa đường dẫn tới object gốc, không phải bản thân object. Nếu file hoặc thư mục gốc bị di chuyển hoặc xóa, link sẽ trở thành "gãy" vì nó không còn trỏ đến một object tồn tại nữa.

Command để tạo symbolic link:

ln -s target link_name
  • target — đường dẫn tới object gốc.
  • link_name — tên của link.

Ví dụ:

ln -s /var/log/syslog log_link

Bây giờ, qua log_link ta có thể truy cập file /var/log/syslog.

Ứng dụng:

  • Đơn giản hóa việc điều hướng.
  • Tạo điểm truy cập thay thế cho file.
  • Tổ chức thư mục.

3. Cấu hình virtual host trong Apache

1. Tạo file cấu hình

Apache sử dụng cách tiếp cận khác. Ở đây, các cấu hình cho virtual hosts được đặt trong thư mục /etc/apache2/sites-available/. Tạo file cho trang web của chúng ta:

sudo nano /etc/apache2/sites-available/example.com.conf

Thêm đoạn mã sau:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com

    DocumentRoot /var/www/example.com
    <Directory /var/www/example.com>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Giải thích ngắn gọn:

  • <VirtualHost *:80>: Chỉ định rằng cấu hình áp dụng cho tất cả yêu cầu trên cổng 80.
  • ServerNameServerAlias: Xác định tên miền chính và bổ sung cho trang web.
  • DocumentRoot: Chỉ định thư mục gốc của trang web.
  • <Directory>: Khối, định nghĩa quyền truy cập và hành vi cho thư mục được chỉ định.

2. Kích hoạt cấu hình

Để kích hoạt cấu hình, sử dụng lệnh:

sudo a2ensite example.com.conf

Khởi động lại server để thay đổi có hiệu lực:

sudo systemctl restart apache2

3. Kiểm tra hoạt động

Tiếp tục, tạo thư mục và file cho trang web:

sudo mkdir -p /var/www/example.com
sudo nano /var/www/example.com/index.html

Thêm nội dung vào file:

<h1>Chào mừng đến với example.com trên Apache!</h1>

Lưu lại và mở trong trình duyệt: http://example.com. Nếu bạn thấy trang chào mừng — chúc mừng, bạn đã cấu hình thành công virtual host trong Apache!


4. Kiểm tra và quản lý nhiều host

Cấu hình Virtual Host thứ hai

Giả sử bạn muốn phục vụ một trang web thứ hai: test.com. Quy trình cũng giống như sau:

  1. Tạo một file cấu hình mới.
  2. Chỉ định tên domain độc nhất và thư mục root.
  3. Kích hoạt cấu hình và khởi động lại server.

Dành cho Nginx:

sudo nano /etc/nginx/sites-available/test.com
sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/
sudo systemctl reload nginx

Dành cho Apache:

sudo nano /etc/apache2/sites-available/test.com.conf
sudo a2ensite test.com.conf
sudo systemctl restart apache2

Gỡ lỗi vấn đề

Nếu các Virtual Hosts của bạn không hoạt động, hãy bắt đầu bằng cách kiểm tra lỗi. Ví dụ:

  • Dành cho Nginx:

      sudo tail -f /var/log/nginx/error.log
    
  • Dành cho Apache:

      sudo tail -f /var/log/apache2/error.log
    

Bạn cũng có thể sử dụng lệnh curl để kiểm tra trực tiếp trang web:

curl -I http://example.com

Bây giờ bạn đã có thể cấu hình Virtual Hosts và chạy nhiều trang web trên một server. Kèm theo đó là việc cấu hình HTTPS để làm cho các trang web của bạn an toàn hơn. Nhưng đó là chủ đề cho bài giảng tiếp theo!

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION