Hướng Dẫn Cài Đặt Và Cấu Hình Nginx & Apache Trên VPS Ubuntu
Nếu bạn đang sử dụng VPS Ubuntu để chạy website, hai Web Server phổ biến nhất thường được cân nhắc là Nginx và Apache. Cả hai đều có thể phục vụ website ổn định, hỗ trợ HTTPS, chạy nhiều domain trên cùng VPS và kết hợp tốt với PHP, Node.js hoặc các backend khác.
Trong đó, cài Nginx trên VPS Ubuntu thường được lựa chọn cho website cần cấu hình gọn nhẹ, reverse proxy hoặc xử lý nhiều kết nối đồng thời. Apache lại nổi bật nhờ hệ sinh thái module phong phú và khả năng cấu hình linh hoạt theo từng website.
Ubuntu hiện vẫn cung cấp và duy trì hướng dẫn chính thức cho cả Apache2 và Nginx trong nhóm Web Services.
Trong bài viết này, Muachungtool sẽ hướng dẫn bạn từ lựa chọn Nginx hay Apache, cài đặt Web Server, chạy nhiều website trên một VPS cho tới kích hoạt SSL Let’s Encrypt miễn phí.
Web Server là gì?
Web Server là phần mềm tiếp nhận request HTTP/HTTPS từ trình duyệt và trả lại nội dung website.

Các Web Server phổ biến gồm:
- Nginx.
- Apache HTTP Server.
- Caddy.
- LiteSpeed.
- OpenLiteSpeed.
Trong đó, Nginx và Apache vẫn là hai lựa chọn rất phổ biến trên Linux.
So sánh hiệu năng giữa Nginx vs Apache
Về bản chất, sự khác biệt lớn nhất giữa hai Web Server này nằm ở cách xử lý kết nối. Apache truyền thống tạo ra một tiến trình hoặc luồng riêng cho mỗi kết nối đến, cách tiếp cận này đơn giản nhưng sẽ tiêu tốn nhiều tài nguyên hơn khi số lượng kết nối đồng thời tăng cao. Trong khi đó, Nginx sử dụng mô hình event-driven bất đồng bộ, cho phép một tiến trình duy nhất xử lý hàng nghìn kết nối cùng lúc, giúp tiết kiệm đáng kể RAM và CPU khi traffic lớn.

Nhìn chung, nếu bạn đang xây dựng một hệ thống mới, cần hiệu năng cao hoặc dùng làm reverse proxy phía trước các ứng dụng khác, Nginx thường là lựa chọn được khuyến nghị nhiều hơn. Ngược lại, nếu bạn đang triển khai một mã nguồn có sẵn phụ thuộc nhiều vào file .htaccess (một số CMS/framework PHP cũ), Apache sẽ giúp việc cấu hình đơn giản hơn đáng kể.
Hướng dẫn cài đặt và cấu hình Nginx Web Server
Bước 1: Update VPS Ubuntu
ssh username@IP_VPS
sudo apt update
sudo apt upgrade -y
Bước 2: Cài Nginx
sudo apt install nginx -y
Kiểm tra:
sudo systemctl status nginx
Bước 3: Kiểm tra Web Server
Truy cập:
http://IP_VPS
Hoặc:
curl http://localhost
Bước 4: Mở Firewall cho Nginx
sudo ufw app list
sudo ufw allow ‘Nginx Full’
sudo ufw status
Hai port quan trọng:
80: HTTP
443: HTTPS
Bước 5: Các thư mục Nginx quan trọng
/etc/nginx/nginx.conf
/etc/nginx/sites-available/
/etc/nginx/sites-enabled/
/var/www/html
/var/log/nginx/access.log
/var/log/nginx/error.log
Bước 6: Các lệnh quản lý Nginx
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx
sudo systemctl enable nginx
sudo nginx -t
Cài Apache trên VPS Ubuntu
Cài Apache trên VPS Ubuntu
sudo apt update
sudo apt install apache2 -y
Kiểm tra:
sudo systemctl status apache2
Nếu dùng UFW:
sudo ufw allow ‘Apache Full’
Các thư mục Apache quan trọng
/etc/apache2/apache2.conf
/etc/apache2/sites-available/
/etc/apache2/sites-enabled/
/etc/apache2/mods-available/
Lệnh quản lý Apache
sudo systemctl start apache2
sudo systemctl stop apache2
sudo systemctl restart apache2
sudo systemctl reload apache2
sudo apache2ctl configtest
Hướng dẫn cấu hình Virtual Host (Server Block) chạy nhiều Website
Trên Nginx, khái niệm này được gọi là “Server Block” (tương đương “Virtual Host” trên Apache), cho phép một VPS duy nhất phục vụ cùng lúc nhiều tên miền/website khác nhau, mỗi website trỏ đến một thư mục mã nguồn riêng biệt.
Đầu tiên, tạo thư mục chứa mã nguồn cho website mới:
sudo mkdir -p /var/www/example.com/html
Tiếp theo, tạo file cấu hình Server Block riêng cho tên miền này:
sudo nano /etc/nginx/sites-available/example.com
Nội dung file cấu hình cơ bản như sau:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.php;
location / {
try_files $uri $uri/ =404;
}
}
Sau khi lưu file, kích hoạt Server Block bằng cách tạo symbolic link sang thư mục sites-enabled, kiểm tra cú pháp rồi tải lại Nginx:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
💡 Mẹo: Với Apache, quy trình tương tự nhưng dùng thư mục sites-available/sites-enabled cùng hai lệnh riêng “a2ensite example.com” và “systemctl reload apache2” để kích hoạt Virtual Host.
Kết hợp PHP-FPM để xử lý nội dung động cùng Nginx
Khác với Apache có thể nhúng trực tiếp module PHP, Nginx cần một tiến trình xử lý PHP riêng biệt chạy song song, phổ biến nhất là PHP-FPM (FastCGI Process Manager). Đây là thành phần bắt buộc nếu website của bạn chạy WordPress hoặc bất kỳ mã nguồn PHP nào.
sudo apt install php-fpm php-mysql -y
Sau khi cài đặt, cập nhật lại Server Block để Nginx biết chuyển các request .php sang cho PHP-FPM xử lý, bằng cách thêm khối location sau vào file cấu hình:
location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.1-fpm.sock; }
Lưu ý phiên bản PHP trong đường dẫn socket (ví dụ php8.1-fpm.sock) cần khớp đúng với phiên bản PHP-FPM thực tế đã cài, có thể kiểm tra bằng lệnh “php -v” hoặc xem trong thư mục /run/php/.
Một số cấu hình bảo mật cơ bản cho Nginx
- Sau khi Web Server đã hoạt động ổn định, nên dành thêm vài phút áp dụng các thiết lập bảo mật cơ bản sau để giảm thiểu thông tin lộ ra cho kẻ tấn công dò quét:
- Ẩn số phiên bản Nginx hiển thị trong header response: thêm dòng “server_tokens off;” vào khối http trong /etc/nginx/nginx.conf
- Tắt tính năng liệt kê file trong thư mục khi không có index: đảm bảo “autoindex off;” (đây cũng là giá trị mặc định)
- Giới hạn kích thước file upload tối đa để tránh bị lợi dụng tải file quá khổ: thêm “client_max_body_size 20M;” tùy nhu cầu thực tế
- Chặn truy cập trực tiếp vào các file nhạy cảm như .env, .git bằng khối location riêng trả về lỗi 403
Sau khi chỉnh sửa nginx.conf, luôn nhớ kiểm tra cú pháp và tải lại trước khi áp dụng vào môi trường thật:
sudo nginx -t && sudo systemctl reload nginx
Cài đặt SSL Let’s Encrypt miễn phí cho Web Server
Một website hiện đại bắt buộc phải có HTTPS để bảo mật dữ liệu truyền tải và tránh bị trình duyệt cảnh báo “Không an toàn”. Let’s Encrypt cung cấp chứng chỉ SSL hoàn toàn miễn phí, tự động gia hạn, và có thể cài đặt cực kỳ nhanh chóng thông qua công cụ Certbot.
sudo apt install certbot python3-certbot-nginx -y
Sau khi cài đặt, chỉ cần chạy lệnh sau và làm theo hướng dẫn (Certbot sẽ tự động phát hiện Server Block và cấu hình SSL giúp bạn):
sudo certbot –nginx -d example.com -d www.example.com
Với Apache, cú pháp tương tự nhưng dùng plugin riêng:
sudo apt install certbot python3-certbot-apache -y
sudo certbot –apache -d example.com -d www.example.com
Chứng chỉ Let’s Encrypt có hiệu lực 90 ngày, nhưng Certbot đã tự động thiết lập sẵn tác vụ gia hạn định kỳ. Bạn có thể kiểm tra thử quá trình gia hạn tự động này có hoạt động đúng không bằng lệnh:
sudo certbot renew –dry-run
Xử lý một số lỗi thường gặp
- 502 Bad Gateway: Nginx không kết nối được đến PHP-FPM phía sau. Kiểm tra PHP-FPM có đang chạy (“sudo systemctl status php8.1-fpm”) và đường dẫn socket trong cấu hình có đúng không.
- 403 Forbidden: thường do sai quyền sở hữu thư mục mã nguồn. Đảm bảo thư mục thuộc quyền user www-data bằng lệnh “sudo chown -R www-data:www-data /var/www/example.com”.
- 404 Not Found dù file tồn tại: kiểm tra lại đường dẫn “root” trong Server Block có trỏ đúng thư mục chứa mã nguồn hay không.
- Nginx không khởi động lại được sau khi sửa cấu hình: luôn chạy “sudo nginx -t” trước để xem chi tiết dòng nào bị sai cú pháp thay vì đoán mò.
- Certbot báo lỗi không xác thực được tên miền: xác nhận DNS A record của tên miền đã trỏ đúng về IP VPS và Port 80 đã được mở trên UFW trước khi chạy lại certbot.
Câu hỏi thường gặp
Nên chọn Nginx hay Apache cho VPS mới?
Với hầu hết dự án mới không bị ràng buộc bởi mã nguồn cũ, Nginx thường được khuyến nghị nhờ hiệu năng tốt hơn khi traffic tăng cao và mức tiêu tốn tài nguyên thấp hơn trên VPS cấu hình vừa/nhỏ.
Có thể chạy cả Nginx và Apache trên cùng VPS không?
Có thể, nhưng cần cấu hình để tránh xung đột Port, phổ biến nhất là dùng Nginx làm reverse proxy ở Port 80/443 phía trước, còn Apache chạy ở một Port nội bộ khác.
Chứng chỉ SSL miễn phí từ Let’s Encrypt có đáng tin cậy không?
Có. Let’s Encrypt được vận hành bởi tổ chức phi lợi nhuận uy tín, được hầu hết trình duyệt và hệ thống hiện đại công nhận, chỉ khác chứng chỉ trả phí ở việc không hỗ trợ một số tính năng doanh nghiệp nâng cao như Extended Validation.
Vì sao truy cập IP VPS không thấy website mà vẫn hiện trang mặc định của Nginx?
Thường do Server Block cho tên miền chưa được kích hoạt đúng cách, hoặc tên miền chưa trỏ DNS về đúng IP của VPS. Kiểm tra lại bằng “sudo nginx -t” và xác nhận bản ghi DNS A record đã đúng.
Vì sao website báo lỗi 502 Bad Gateway sau khi cài WordPress?
Nguyên nhân phổ biến nhất là PHP-FPM chưa được cài đặt, chưa chạy, hoặc đường dẫn socket trong Server Block không khớp với phiên bản PHP-FPM thực tế đang cài trên VPS.
Việc nắm vững cách cài đặt và cấu hình Nginx/Apache, kết hợp cùng chứng chỉ SSL miễn phí, chính là bước nền tảng để bạn tự tin triển khai bất kỳ website hay ứng dụng nào lên VPS Ubuntu một cách chuyên nghiệp và an toàn.


