Đang tải…
Flag
VN Tiếng Việt
EN English
ZH 简体中文
KO 한국어
JA 日本語
Dùng thử VPS

Chạy nhiều website trên một VPS với Nginx server block và SSL riêng

Hướng dẫn 2026-11-06 19:31:40 1 lượt xem

Chạy nhiều website trên một VPS giúp tiết kiệm chi phí: mỗi tên miền có thư mục, cơ sở dữ liệu và chứng chỉ SSL riêng, cùng dùng chung tài nguyên máy chủ. Bài viết hướng dẫn cấu hình Nginx server block cho từng tên miền trên Ubuntu, kèm cách tách quyền để website này không đọc được dữ liệu website kia.

Chuẩn bị

Bước 1: Tạo thư mục cho từng website

mkdir -p /var/www/site1.com/public /var/www/site2.com/public
echo "Site 1" > /var/www/site1.com/public/index.html
echo "Site 2" > /var/www/site2.com/public/index.html

Bước 2: Tạo server block cho mỗi tên miền

nano /etc/nginx/sites-available/site1.com
server {
    listen 80;
    server_name site1.com www.site1.com;
    root /var/www/site1.com/public;
    index index.php index.html;

    access_log /var/log/nginx/site1.com.access.log;
    error_log  /var/log/nginx/site1.com.error.log;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    }

    location ~ /\.(?!well-known) { deny all; }
}

Làm tương tự cho site2.com, đổi server_name, root và tên file log. Kiểm tra đúng tên socket PHP-FPM bằng ls /run/php/.

ln -s /etc/nginx/sites-available/site1.com /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/site2.com /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

Bước 3: Cơ sở dữ liệu riêng cho từng website

mysql -e "CREATE DATABASE site1 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mysql -e "CREATE USER 'site1'@'localhost' IDENTIFIED BY 'MatKhauManh1';"
mysql -e "GRANT ALL ON site1.* TO 'site1'@'localhost'; FLUSH PRIVILEGES;"

Mỗi website một tài khoản cơ sở dữ liệu: website này bị lộ mật khẩu cũng không đụng được dữ liệu website khác.

Bước 4: Tách quyền bằng PHP-FPM pool (khuyên dùng)

Mặc định mọi website PHP chạy chung tài khoản www-data, một website bị hack có thể đọc file của website khác. Tạo người dùng và pool riêng:

useradd -M -s /usr/sbin/nologin site1
chown -R site1:site1 /var/www/site1.com
cp /etc/php/8.1/fpm/pool.d/www.conf /etc/php/8.1/fpm/pool.d/site1.conf
nano /etc/php/8.1/fpm/pool.d/site1.conf

Sửa các dòng sau trong site1.conf:

[site1]
user = site1
group = site1
listen = /run/php/php8.1-fpm-site1.sock
listen.owner = www-data
listen.group = www-data
systemctl restart php8.1-fpm

Rồi đổi fastcgi_pass trong server block của site1 sang unix:/run/php/php8.1-fpm-site1.sock, chạy nginx -t && systemctl reload nginx. Thư mục cần cho Nginx đọc file tĩnh: chmod 750 /var/www/site1.com và thêm www-data vào nhóm site1 (usermod -aG site1 www-data).

Bước 5: SSL cho từng tên miền

certbot --nginx -d site1.com -d www.site1.com
certbot --nginx -d site2.com -d www.site2.com
certbot renew --dry-run

Một VPS chạy được bao nhiêu website?

Phụ thuộc lượng truy cập và loại website hơn là số lượng. Vài website WordPress ít truy cập chạy tốt trên VPS 2 GB RAM; website đông khách hoặc cửa hàng nên tính thêm tài nguyên. Theo dõi tải bằng các lệnh trong bài kiểm tra CPU, RAM, ổ đĩa VPS Linux.

Kết luận

Mỗi tên miền một server block, một cơ sở dữ liệu, một pool PHP-FPM là cách quản lý nhiều website gọn gàng và an toàn trên một VPS. Nếu không muốn tự quản trị máy chủ, Reseller Hosting cho bạn tạo nhiều tài khoản cPanel tách biệt sẵn. Còn muốn toàn quyền, chọn Cloud VPS.


Bạn thấy bài viết này hữu ích?

Chia sẻ lên Facebook

Liên hệ hỗ trợ

Chọn kênh liên hệ phù hợp với bạn

Đang trực tuyến

Telegram

Nhắn tin nhanh qua Telegram

Zalo

Zalo

Chat trực tiếp qua Zalo