Website được thiết kế tối ưu cho thành viên chính thức. Hãy Đăng nhập hoặc Đăng ký để truy cập đầy đủ nội dung và chức năng. Nội dung bạn cần không thấy trên website, có thể do bạn chưa đăng nhập. Nếu là thành viên của website, bạn cũng có thể yêu cầu trong nhóm Zalo "CNTT" các nội dung bạn quan tâm.

15. Tạo virtual host (server block) chuẩn production

ICT

1. Vì sao virtual host là cấu hình “xương sống” của Nginx?

Virtual host (trong Nginx gọi là server block) quyết định:

  • Domain nào trỏ vào website nào

  • Thư mục nào được phép truy cập

  • Log được ghi ra đâu

  • Cách request được xử lý

Nếu virtual host được cấu hình:

  • Vội vàng

  • Dùng cấu hình mẫu không hiểu rõ

  • Trộn nhiều website trong một file

thì hệ quả là:

Càng thêm website, cấu hình càng rối và rủi ro càng cao.


2. Nguyên tắc tạo virtual host cho production

Trong loạt bài này, virtual host được xây dựng theo các nguyên tắc:

  1. Mỗi website → một file cấu hình riêng

  2. Mỗi website → một thư mục web riêng

  3. Có log riêng cho từng website

  4. Không cấu hình PHP nếu chưa cần

  5. Không bật SSL ở bước này (sẽ làm sau)

Nguyên tắc:

Virtual host đầu tiên phải đủ sạch để nhân bản cho các site sau.


3. Chuẩn bị trước khi tạo virtual host

Trước khi viết cấu hình, cần chuẩn bị:

  • Domain đã trỏ DNS về IP server

  • Thư mục web cho website

  • Quyền truy cập thư mục đúng

Ví dụ:

/srv/www/site1

Tạo thư mục:

sudo mkdir -p /srv/www/site1/public

Gán quyền:

sudo chown -R admin:webdev /srv/www/site1
sudo chmod -R 750 /srv/www/site1

4. Tạo file cấu hình virtual host

4.1. Vị trí file cấu hình

Tạo file trong:

/etc/nginx/sites-available/site1.conf

4.2. Nội dung cấu hình cơ bản

Ví dụ cấu hình HTTP chuẩn production (chưa PHP, chưa SSL):

server {
   listen 80;
   server_name site1.example.com www.site1.example.com;
   root /var/www/site1/public;
   index index.html index.htm;
   access_log /var/log/nginx/site1.access.log;
   error_log  /var/log/nginx/site1.error.log;
   location / {
       try_files $uri $uri/ =404;
   }
}

4.3. Giải thích các thành phần quan trọng

  • listen 80: lắng nghe HTTP

  • server_name: domain của website

  • root: thư mục public

  • access_log, error_log: log riêng

  • try_files: tránh lộ file không tồn tại

Nguyên tắc:

Không dùng cấu hình mặc định cho production.


5. Kích hoạt virtual host

Tạo symlink:

sudo ln -s /etc/nginx/sites-available/site1.conf /etc/nginx/sites-enabled/

6. Vô hiệu site mặc định (khuyến nghị)

Nếu chưa cần site mặc định của Nginx:

sudo rm /etc/nginx/sites-enabled/default

Điều này giúp:

  • Tránh truy cập nhầm site

  • Không lộ cấu hình mặc định


7. Kiểm tra cấu hình trước khi reload

Luôn kiểm tra cú pháp:

sudo nginx -t

Chỉ khi thấy:

syntax is ok test is successful

mới reload:

sudo systemctl reload nginx

8. Kiểm tra hoạt động của virtual host

  • Truy cập:

    http://site1.example.com 
  • Hoặc:

    http://IP_SERVER 

    (nếu dùng hosts file để test)

Kiểm tra log:

tail -f /var/log/nginx/site1.access.log 

9. Cấu trúc thư mục web – chuẩn production

Khuyến nghị:

Nginx chỉ trỏ vào public/, các thư mục khác không được truy cập từ web.


10. Những sai lầm phổ biến khi tạo virtual host

  • Dùng chung một thư mục cho nhiều site

  • Không có log riêng

  • Để root trỏ vào thư mục chứa file nhạy cảm

  • Copy cấu hình mà không đổi server_name

Những lỗi này:

Không gây sập ngay, nhưng gây lộ dữ liệu hoặc khó debug.


11. Checklist virtual host chuẩn production

  •  File cấu hình riêng cho website

  •  Thư mục web riêng

  •  Root trỏ vào thư mục public

  •  Log riêng

  •  Site mặc định đã tắt

  •  Test cấu hình trước khi reload


12. Bài tiếp theo

Trong Bài 16, chúng ta sẽ mở rộng thêm:

Quản lý nhiều website trên cùng một server

Bài này sẽ hướng dẫn:

  • Tổ chức cấu hình khi có nhiều domain

  • Tránh xung đột cấu hình

  • Chuẩn bị cho hệ thống lớn dần