Cài Nginx Ubuntu là bước đầu tiên để biến VPS trắng thành web server tiếp nhận truy cập HTTP và phân phối nội dung website. Nginx dùng kiến trúc hướng sự kiện nên tốn rất ít RAM khi phục vụ tệp tĩnh, và có thể chạy nhiều tên miền trên cùng một máy chủ nhờ server block.
Tuy nhiên, chỉ cài gói nginx là chưa đủ. Bạn cần mở cổng tường lửa mà không làm mất kết nối SSH, phân quyền đúng thư mục và kiểm tra cú pháp trước khi nạp lại dịch vụ.
Chuẩn bị VPS trước khi cài
Bạn cần đăng nhập SSH bằng tài khoản root hoặc tài khoản có quyền sudo. Nếu chưa quen dòng lệnh, hãy xem trước bài quản trị VPS Linux.
Hãy kiểm tra phiên bản Ubuntu và xem cổng 80 đã bị dịch vụ nào chiếm chưa (ví dụ apache2 cài sẵn trong một số bản mẫu):
lsb_release -a
sudo ss -tulpn | grep ':80'

Nếu apache2 đang giữ cổng 80, Nginx sẽ báo lỗi bind() to 0.0.0.0:80 failed (98: Address already in use). Khi không dùng Apache, hãy tắt nó bằng lệnh dưới đây.
sudo systemctl stop apache2
sudo systemctl disable apache2
Tiếp theo, xác định IP công khai bằng lệnh dưới đây. Nếu đã có tên miền, hãy tạo bản ghi A theo hướng dẫn trỏ tên miền về VPS. Vì sắp thao tác với UFW, bạn cũng nên biết vị trí VNC/Console dự phòng trên trang quản lý dịch vụ, phòng khi cấu hình nhầm làm mất SSH.
curl -4 ifconfig.me
Cài Nginx và kiểm tra dịch vụ
sudo apt update
sudo apt install nginx -y
sudo systemctl enable --now nginx
sudo systemctl status nginx

Khi thấy Active: active (running), Nginx đã chạy và sẽ tự khởi động lại sau mỗi lần reboot.
Mở cổng HTTP mà vẫn giữ SSH
Nguyên tắc an toàn là luôn cho phép SSH trước, rồi mới mở cổng cho Nginx. Nginx đăng ký sẵn ba profile với UFW:
- Nginx HTTP: chỉ mở cổng 80.
- Nginx HTTPS: chỉ mở cổng 443.
- Nginx Full: mở cả 80 và 443.
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx HTTP'
sudo ufw enable
sudo ufw status

Nếu bạn đã đổi cổng SSH (ví dụ 2222), hãy chạy lệnh dưới đây trước khi bật UFW. Nếu định cài SSL ngay sau đó, có thể mở sẵn Nginx Full.
sudo ufw allow 2222/tcp
Kiểm tra trang mặc định
curl -I localhost

Nhận được HTTP/1.1 200 OK kèm Server: nginx/... nghĩa là dịch vụ đã phản hồi. Sau đó mở http://IP_CỦA_VPS trên trình duyệt. Khi thấy trang “Welcome to nginx!”, cả Nginx lẫn tường lửa cổng 80 đã thông suốt.

Tạo server block cho tên miền
Trang mặc định lấy nội dung từ /var/www/html. Khi vận hành thực tế, hãy tạo một server block riêng cho từng tên miền (tương tự VirtualHost của Apache) để dễ thêm website thứ hai, thứ ba mà không lẫn cấu hình.
Chuẩn bị thư mục và trang thử
Thay example.com bằng tên miền thật của bạn:
sudo mkdir -p /var/www/example.com/html
sudo chown -R $USER:www-data /var/www/example.com/html
sudo chmod -R 755 /var/www/example.com
index.html tối giản để nhận biết khi kiểm tra:
echo 'Server block của example.com đã hoạt động trên Ubuntu!
' | sudo tee /var/www/example.com/html/index.html

Khai báo server_name, root và index
Trên Ubuntu, cấu hình từng website nằm trong /etc/nginx/sites-available/. Chỉ những tệp được tạo symlink sang /etc/nginx/sites-enabled/ mới được Nginx nạp.
sudo nano /etc/nginx/sites-available/example.com
Nội dung tệp:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location / {
try_files $uri $uri/ =404;
}
}
| Chỉ thị | Chức năng |
listen 80; / listen [::]:80; | Lắng nghe HTTP trên cổng 80 cho IPv4 và IPv6 |
server_name | Các tên miền mà khối này phụ trách (tên miền gốc và www) |
root | Đường dẫn tuyệt đối tới thư mục chứa website |
index | Thứ tự các tệp mặc định được trả về |
try_files $uri $uri/ =404; | Kiểm tra tệp hoặc thư mục có tồn tại, nếu không thì trả lỗi 404 |
Kích hoạt, kiểm tra cú pháp và reload
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Hãy dùng đường dẫn tuyệt đối trong ln -s để tránh tạo symlink hỏng. Chỉ reload khi nginx -t báo syntax is ok và test is successful. Lệnh reload nạp cấu hình mới mà không ngắt các kết nối đang diễn ra, khác với restart.
Kiểm tra đúng tên miền, đúng thư mục
Bạn có thể kiểm tra ngay mà không cần chờ DNS cập nhật, bằng cách gửi kèm Host header:
curl -H "Host: example.com" localhost
Nếu trả về dòng Server block của example.com đã hoạt động trên Ubuntu!, Nginx đã nhận đúng server_name và root. Để xem trên trình duyệt trước khi đổi DNS, hãy thêm tạm dòng IP_CỦA_VPS example.com www.example.com vào tệp hosts trên máy tính của bạn.

Xử lý các lỗi thường gặp
| Biểu hiện | Nguyên nhân | Cách xử lý |
| Vẫn hiện “Welcome to nginx!” khi gõ tên miền | Sai server_name, chưa tạo symlink sang sites-enabled, hoặc chưa reload | Chạy ls -l /etc/nginx/sites-enabled/, đối chiếu server_name, rồi sudo systemctl reload nginx |
| 403 Forbidden | Thiếu index.html, hoặc www-data không có quyền đi qua thư mục cha (ví dụ web nằm trong /root hoặc /home/user quyền 700) | Đặt web trong /var/www/, kiểm tra tên index.html viết thường, chạy sudo chmod -R 755 /var/www/example.com |
| Connection refused hoặc Timeout | Nginx đang dừng, hoặc cổng 80 bị UFW / tường lửa bên ngoài chặn | Chạy sudo ss -tulpn | grep ':80' và sudo ufw status |
Nếu muốn truy cập website trực tiếp bằng IP, hãy xóa trang mặc định bằng sudo rm /etc/nginx/sites-enabled/default rồi reload Nginx.
Quản lý Nginx và đọc log
Bốn lệnh bạn cần phân biệt rõ:
sudo nginx -t: kiểm tra cú pháp toàn bộ cấu hình trước khi áp dụng.sudo nginx -T: in toàn bộ cấu hình đang nạp, hữu ích để tìm chỉ thị bị trùng giữa nhiều tệp.sudo systemctl reload nginx: nạp cấu hình mới mà không gián đoạn người dùng.sudo systemctl restart nginx: tắt rồi bật lại hoàn toàn, chỉ dùng khi đổi cổng lắng nghe hoặc tiến trình bị treo.
Khi nginx -t hoặc reload thất bại, hãy xem tệp và dòng bị lỗi (thường là thiếu dấu ; hoặc sai đường dẫn) bằng:
sudo journalctl -xeu nginx.service
Với lỗi 403, 404, 500 khi truy cập website, hãy theo dõi log theo thời gian thực:
sudo tail -f /var/log/nginx/example.com.error.log
Bước tiếp theo: HTTPS hoặc LEMP
Sau khi server block phục vụ được trang tĩnh qua HTTP, bạn có hai hướng mở rộng:
- Bật HTTPS: nếu chạy website tĩnh, landing page, hoặc dùng Nginx làm reverse proxy cho ứng dụng Node.js/Python/Docker và tên miền đã trỏ đúng IP, hãy làm tiếp bài cài SSL cho Nginx để cấp chứng chỉ Let’s Encrypt miễn phí và tự động chuyển hướng sang cổng 443.
- Thêm PHP-FPM và database: Nginx không tự thực thi tệp .php và không có sẵn hệ quản trị cơ sở dữ liệu. Nếu chạy WordPress, WooCommerce, Laravel hoặc PHP động, hãy theo bài cài LEMP trên Ubuntu.

Kết luận
Quy trình cài Nginx Ubuntu gồm các bước: kiểm tra cổng 80, mở UFW an toàn, tách từng server block trong /etc/nginx/sites-available/. Hãy giữ thói quen chạy sudo nginx -t trước mỗi lần reload và kiểm tra bằng curl để phát hiện sớm sai sót.
Nếu cần VPS giá rẻ Ubuntu dùng ổ NVMe tốc độ cao, toàn quyền root để triển khai Nginx, bạn có thể tham khảo các gói tại THUEVPSGIARE.COM.

Tôi là Trần Thành Hồng Quân, nhân viên kỹ thuật tại THUEVPSGIARE.COM. Với hơn 5 năm kinh nghiệm trong lĩnh vực VPS, Hosting và quản trị hệ thống, tôi đã trực tiếp triển khai, vận hành và xử lý nhiều vấn đề kỹ thuật liên quan đến máy chủ và hạ tầng hosting. Thông qua các bài viết kỹ thuật trên THUEVPSGIARE.COM, tôi mong muốn chia sẻ những kiến thức thực tế, dễ hiểu và có thể áp dụng, giúp người dùng sử dụng VPS, Hosting và Server hiệu quả, ổn định và an toàn hơn.


