Cài Nginx trên Ubuntu và thiết lập website cơ bản

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'

				
			
Kiểm tra phiên bản Ubuntu và cổng 80 trước khi cài Nginx bằng lệnh ss
Kiểm tra phiên bản Ubuntu và cổng 80 trước khi cài Nginx bằng lệnh ss

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
				
			
Kiểm tra phản hồi HTTP 200 OK từ máy chủ Nginx trên VPS Ubuntu bằng lệnh curl
Kiểm tra phản hồi HTTP 200 OK từ máy chủ Nginx trên VPS Ubuntu bằng lệnh curl

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
				
			
UFW cho phép OpenSSH và Nginx HTTP, mở cổng 80 mà vẫn giữ kết nối SSH
UFW cho phép OpenSSH và Nginx HTTP, mở cổng 80 mà vẫn giữ kết nối SSH

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
				
			
Lệnh curl trả về HTTP 200 OK và Server nginx, xác nhận Nginx đã phản hồi
Lệnh curl trả về HTTP 200 OK và Server nginx, xác nhận Nginx đã phản hồi

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.

Xem Thêm  Cài LEMP trên Ubuntu để chạy website PHP
Cấu hình tường lửa UFW mở cổng HTTP 80 cho Nginx và giữ kết nối SSH trên Ubuntu
Cấu hình tường lửa UFW mở cổng HTTP 80 cho Nginx và giữ kết nối SSH trên Ubuntu

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
				
			
Tạo trang index.html tối giản để nhận biết khi kiểm tra:
				
					echo '<h1 id="ftoc-heading-7" class="ftwp-heading">Server block của example.com đã hoạt động trên Ubuntu!</h1>' | sudo tee /var/www/example.com/html/index.html
				
			
Tạo file index.html trong thư mục /var/www/example.com/html bằng lệnh tee
Tạo file index.html trong thư mục /var/www/example.com/html bằng lệnh tee

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_nameCá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
indexThứ 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
Tách riêng access_log và error_log theo tên miền giúp chẩn đoán lỗi nhanh hơn khi VPS chạy nhiều website.

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.

Sơ đồ cấu trúc Nginx server block từ sites-available sang sites-enabled và thư mục mã nguồn
Sơ đồ cấu trúc Nginx server block từ sites-available sang sites-enabled và thư mục mã nguồn

Xử lý các lỗi thường gặp

Biểu hiệnNguyên nhânCách xử lý
Vẫn hiện “Welcome to nginx!” khi gõ tên miềnSai server_name, chưa tạo symlink sang sites-enabled, hoặc chưa reloadChạy ls -l /etc/nginx/sites-enabled/, đối chiếu server_name, rồi sudo systemctl reload nginx
403 ForbiddenThiế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 TimeoutNginx đang dừng, hoặc cổng 80 bị UFW / tường lửa bên ngoài chặnChạ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.

Xem Thêm  Hướng Dẫn Cài Đặt aaPanel Trên VPS Từ A-Z Cho Người Mới 2026

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.
Quy trình kiểm tra server block Nginx bằng curl và mở rộng sang HTTPS hoặc LEMP stack
Quy trình kiểm tra server block Nginx bằng curl và mở rộng sang HTTPS hoặc LEMP stack

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.

Có Thể Bạn Thích
Bài viết mới
Zalozalo
Telegram
Lên đầu trang