Nhiều site trên một máy chủ
Cách host hàng chục site trên một VPS: bố cục thư mục, cấu hình và người dùng riêng, chứng chỉ dùng chung, và ước lượng tải theo tier.
Cập nhật 23 tháng 8, 2026
Một địa chỉ IPv4 công khai duy nhất có thể phục vụ bất kỳ số lượng tên miền nào: máy chủ web định tuyến yêu cầu dựa trên header Host. Giới hạn không nằm ở số địa chỉ — mà ở bộ nhớ và dung lượng đĩa của gói bạn dùng.
Bố cục
Hãy giữ một mẫu duy nhất, nếu không thì sáu tháng nữa bạn sẽ không biết trang nào thuộc về ai:
/var/www/example.ru/public
/var/www/example.ru/logs
/var/www/shop.ru/public
/var/www/shop.ru/logs
Giữ một tệp cấu hình riêng cho mỗi trang: /etc/nginx/sites-available/<domain>, kích hoạt qua một symlink trong sites-enabled. Khi đó, vô hiệu hóa một trang chỉ cần xóa một symlink và tải lại, thay vì phải đi tìm đúng đoạn cấu hình trong một tệp dùng chung.
Cấu hình
server {
listen 80;
server_name example.ru www.example.ru;
root /var/www/example.ru/public;
index index.html index.php;
access_log /var/www/example.ru/logs/access.log;
}
Hãy thiết lập thêm một “trang bắt tất cả” cho các tên miền không xác định, nếu không thì cấu hình đầu tiên theo thứ tự bảng chữ cái sẽ mở ra cho bất kỳ tên miền của bên thứ ba nào trỏ đến địa chỉ của bạn:
server {
listen 80 default_server;
server_name _;
return 444;
}
Tách quyền
Nếu các trang thuộc về những khách hàng khác nhau hoặc những dự án khác nhau, đừng cấp cho chúng một người dùng chung: nếu không, một lỗ hổng trong một script sẽ đồng nghĩa với quyền truy cập vào tất cả.
useradd -r -d /var/www/example.ru -s /usr/sbin/nologin site-example
chown -R site-example:www-data /var/www/example.ru
chmod 750 /var/www/example.ru
Với PHP, hãy tạo một pool FPM riêng cho mỗi trang với user và listen riêng — xem PHP-FPM. Cũng hãy tách riêng cơ sở dữ liệu của bạn: người dùng và quyền.
Chứng chỉ
Một lần chạy certbot duy nhất bao phủ nhiều tên miền cùng lúc:
certbot --nginx -d example.ru -d www.example.ru -d shop.ru -d www.shop.ru
Việc gia hạn được dùng chung, chỉ một timer. Chi tiết — Let's Encrypt.
Bao nhiêu trang sẽ vừa
Hãy tính theo bộ nhớ, không phải theo số lượng tên miền. Một trang tĩnh gần như không tốn gì; một trang CMS có cơ sở dữ liệu tốn hàng trăm megabyte.
| Gói | Bộ nhớ | Hướng dẫn |
|---|---|---|
| VDS-1 (2 GB) | 2 GB | 1–2 trang CMS hoặc một tá trang tĩnh |
| VDS-2 (4 GB) | 4 GB | 3–5 trang CMS |
| VDS-3 (8 GB) | 8 GB | 8–12 trang CMS |
Dung lượng đĩa cũng có hạn: 40 GB trên VDS-1, 250 GB trên VDS-6. Bạn chỉ có thể nâng cấp gói, trả phần chênh lệch cho những ngày còn lại của kỳ đã thanh toán.
Lỗi thường gặp
| Triệu chứng | Nguyên nhân |
|---|---|
| Tất cả tên miền đều hiển thị cùng một trang | server_name không khớp, nên block đầu tiên đã xử lý yêu cầu |
| Log của tất cả các trang nằm trong một tệp | access_log không được đặt trong block của trang |
| Một trang làm sập tất cả | Pool PHP-FPM dùng chung không có giới hạn |
| Hết dung lượng đĩa | Log và bản sao lưu trên cùng một đĩa — hãy thiết lập logrotate |
Trước khi thêm một trang mới, hãy kiểm tra biểu đồ bộ nhớ của tuần qua trong “Tổng quan” của bảng điều khiển tại
/hosting/vds/m/<id>. Nếu mức đỉnh đã chạm trần, thì trang mới sẽ là nguyên nhân gây crash, chứ không phải là hệ quả.