Cài Đặt Nginx Trên VPS – Hướng Dẫn Chi Tiết Từ A-Z Cho Người Mới Bắt Đầu
- Published on

Giới Thiệu
Nginx là một trong những web server phổ biến và mạnh mẽ nhất hiện nay, được sử dụng bởi các trang web lớn như Netflix, Dropbox, và WordPress.com. Với kiến trúc event-driven, Nginx có thể xử lý hàng ngàn kết nối đồng thời mà không tiêu tốn quá nhiều tài nguyên.
Khi bạn thuê một VPS (Virtual Private Server), việc đầu tiên cần làm là cài đặt và cấu hình web server. Bài viết này sẽ hướng dẫn bạn từng bước từ A-Z cách cài đặt Nginx trên VPS chạy Ubuntu 22.04 hoặc 24.04.
Nếu bạn chưa rõ Nginx là gì, hãy đọc bài Nginx là gì? Kiến thức từ A-Z về Nginx Web Server. Còn nếu bạn chưa có VPS, tham khảo VPS là gì? So sánh VPS vs Shared Hosting.
Chuẩn Bị
Trước khi bắt đầu, bạn cần:
Yêu Cầu
- Một VPS chạy Ubuntu 22.04 hoặc 24.04 (LTS).
- Quyền root hoặc user có quyền
sudo. - Kết nối SSH đến VPS (dùng PuTTY trên Windows hoặc terminal trên macOS/Linux).
- Tên miền đã trỏ về IP của VPS (nếu muốn chạy website thật).
Kết Nối SSH
ssh user@your-server-ip
Thay user bằng tên người dùng và your-server-ip bằng địa chỉ IP thực tế của VPS.
Cập Nhật Hệ Thống
Trước khi cài bất kỳ phần mềm nào, hãy cập nhật package list:
sudo apt update
sudo apt upgrade -y
Việc này đảm bảo bạn đang cài đặt phiên bản mới nhất của các gói.
Bước 1: Cài Đặt Nginx
1.1. Cài Đặt Từ Repository Chính Thức
Ubuntu có sẵn Nginx trong kho package mặc định. Để cài đặt:
sudo apt install nginx -y
Sau khi cài đặt, Nginx sẽ tự động khởi động. Kiểm tra:
sudo systemctl status nginx
Bạn sẽ thấy output tương tự:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since ...
1.2. Cấu Hình Firewall (UFW)
Nếu bạn đang dùng UFW (Uncomplicated Firewall), cần mở port cho Nginx:
sudo ufw allow 'Nginx Full'
Kiểm tra trạng thái:
sudo ufw status
Output mong đợi:
Status: active
To Action From
-- ------ ----
Nginx Full ALLOW Anywhere
Nginx Full (v6) ALLOW Anywhere (v6)
Nginx Full = mở cả port 80 (HTTP) và 443 (HTTPS).
1.3. Kiểm Tra Nginx Hoạt Động
Mở trình duyệt và truy cập http://your-server-ip. Nếu thấy trang "Welcome to nginx!", bạn đã cài đặt thành công.
Để tìm IP của VPS:
curl -4 icanhazip.com
1.4. Cấu Trúc Thư Mục Quan Trọng
Sau khi cài Nginx, bạn cần nằm lòng các đường dẫn sau:
| Đường dẫn | Mô tả |
|---|---|
/etc/nginx/nginx.conf | File cấu hình chính |
/etc/nginx/sites-available/ | Chứa cấu hình của từng website (chưa kích hoạt) |
/etc/nginx/sites-enabled/ | Chứa symlink đến các site đã kích hoạt |
/etc/nginx/conf.d/ | Thư mục chứa các file cấu hình phụ |
/var/www/ | Thư mục gốc chứa file website |
/var/log/nginx/access.log | Log truy cập |
/var/log/nginx/error.log | Log lỗi |
Xem thêm: Web Server là gì? để hiểu cách web server hoạt động.
Bước 2: Cấu Hình Virtual Host (Server Block)
Virtual Host (hay Server Block trong Nginx) cho phép bạn chạy nhiều website trên cùng một VPS.
2.1. Tạo Thư Mục Website
sudo mkdir -p /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example.com/html
sudo chmod -R 755 /var/www/example.com
Tạo file index.html mẫu:
nano /var/www/example.com/html/index.html
Thêm nội dung:
<html>
<head>
<title>Welcome to example.com</title>
</head>
<body>
<h1>Nginx installed successfully!</h1>
<p>Your site is running on example.com</p>
</body>
</html>
2.2. Tạo Server Block
Tạo file cấu hình:
sudo nano /etc/nginx/sites-available/example.com
Thêm nội dung:
server {
listen 80;
listen [::]:80;
root /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
}
2.3. Kích Hoạt Server Block
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
Kiểm tra cấu hình trước khi reload:
sudo nginx -t
Nếu output là test is successful, tiến hành reload:
sudo systemctl reload nginx
2.4. Disable Server Block Mặc Định
Nginx đi kèm một server block mặc định ở /etc/nginx/sites-enabled/default. Bạn có thể bỏ nó đi:
sudo rm /etc/nginx/sites-enabled/default
sudo systemctl reload nginx
Mẹo: Dùng
sudo unlink /etc/nginx/sites-enabled/defaultthay vìrmđể giữ file cấu hình gốc.
Bây giờ truy cập http://example.com — bạn sẽ thấy trang web vừa tạo.
Bước 3: Tích Hợp PHP-FPM Cho WordPress
Nếu bạn muốn chạy WordPress hoặc bất kỳ CMS PHP nào trên VPS, bạn cần cài đặt PHP-FPM.
3.1. Cài Đặt PHP-FPM
sudo apt install php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-zip php-opcache -y
Lệnh này cài PHP 8.3 (mặc định trên Ubuntu 24.04) cùng các extension phổ biến cho WordPress.
3.2. Cấu Hình Nginx Với PHP-FPM
Chỉnh sửa server block của bạn:
sudo nano /etc/nginx/sites-available/example.com
Thêm khối location ~ \.php$:
server {
listen 80;
listen [::]:80;
root /var/www/example.com/html;
index index.php index.html index.htm;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Kiểm tra và reload:
sudo nginx -t
sudo systemctl reload nginx
3.3. Kiểm Tra PHP Hoạt Động
Tạo file info.php trong thư mục gốc:
echo "<?php phpinfo(); ?>" | sudo tee /var/www/example.com/html/info.php
Truy cập http://example.com/info.php. Nếu thấy trang thông tin PHP, PHP-FPM đã hoạt động.
Quan trọng: Xóa file
info.phpsau khi kiểm tra vì nó tiết lộ thông tin nhạy cảm:sudo rm /var/www/example.com/html/info.php
Tìm hiểu thêm về cách tối ưu hosting cho WordPress sau khi hoàn tất cấu hình.
Bước 4: Bảo Mật Nginx
4.1. Tắt Thông Tin Phiên Bản Nginx
Mặc định, Nginx hiển thị phiên bản trong HTTP header. Tắt nó đi:
Mở file cấu hình chính:
sudo nano /etc/nginx/nginx.conf
Thêm dòng sau trong khối http:
server_tokens off;
4.2. Cấu Hình Security Headers
Thêm các header bảo mật vào server block:
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
4.3. Giới Hạn Kích Thước Upload
Mặc định, Nginx giới hạn upload ở 1MB. Để tăng lên:
Trong file nginx.conf hoặc server block:
client_max_body_size 128M;
4.4. Chống Brute Force Và DDoS
Giới hạn số lượng request từ một IP:
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
server {
...
location / {
limit_req zone=mylimit burst=20 nodelay;
...
}
}
4.5. Tắt Truy Cập Vào Các File Nhạy Cảm
location ~ /\.(?!well-known) {
deny all;
}
location = /wp-config.php {
deny all;
}
Kiểm tra và reload sau mỗi thay đổi:
sudo nginx -t && sudo systemctl reload nginx
Xem thêm: Hướng dẫn bảo mật website toàn diện.
Bước 5: Cài Đặt SSL Với Let's Encrypt
HTTPS là bắt buộc cho website hiện đại. Let's Encrypt cung cấp SSL miễn phí.
5.1. Cài Đặt Certbot
sudo apt install certbot python3-certbot-nginx -y
5.2. Cấp Chứng Chỉ SSL
sudo certbot --nginx -d example.com -d www.example.com
Certbot sẽ tự động:
- Xác thực domain.
- Cấp chứng chỉ SSL.
- Cập nhật cấu hình Nginx để chuyển hướng HTTP → HTTPS.
5.3. Kiểm Tra Gia Hạn Tự Động
sudo certbot renew --dry-run
Chứng chỉ Let's Encrypt có hiệu lực 90 ngày. Certbot tự động gia hạn qua cron job.
Xem thêm: SSL là gì? và HTTPS là gì?
Sau khi cài SSL, file cấu hình Nginx của bạn sẽ trông giống:
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
root /var/www/example.com/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
}
}
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
Hướng dẫn chi tiết hơn tại Cài đặt SSL Cloudflare miễn phí.
Bước 6: Tối Ưu Hiệu Suất Nginx
6.1. Cấu Hình Worker Processes
Mở file /etc/nginx/nginx.conf:
worker_processes auto;
worker_connections 1024;
keepalive_timeout 65;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
worker_processes auto— tự động set số worker bằng số CPU core.worker_connections— số kết nối tối đa mỗi worker.sendfile— tối ưu gửi file tĩnh.tcp_nopush/tcp_nodelay— tối ưu TCP.
6.2. Bật Gzip
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript text/javascript image/svg+xml;
6.3. Cache File Tĩnh
Trong server block:
location ~* \.(jpg|jpeg|png|gif|ico|css|js|webp|avif|woff|woff2)$ {
expires 365d;
add_header Cache-Control "public, immutable";
}
6.4. Tối Ưu Cho WordPress
Nếu bạn chạy WordPress, thêm cấu hình sau:
# Cache static files
location ~* \.(jpg|jpeg|png|gif|ico|css|js|webp|avif)$ {
expires 365d;
add_header Cache-Control "public, immutable";
}
# Deny access to sensitive files
location ~ /\.(?!well-known) {
deny all;
}
# WordPress admin protection
location = /wp-login.php {
limit_req zone=login burst=3 nodelay;
}
# Deny PHP files in uploads directory
location ~* /uploads/.*\.php$ {
deny all;
}
Xem thêm: 26+ Tips tối ưu tốc độ website WordPress.
6.5. Kiểm Tra Hiệu Suất
Dùng các công cụ để kiểm tra sau khi tối ưu:
# Kiểm tra số lượng worker process
ps aux | grep nginx
# Kiểm tra Nginx đang xử lý bao nhiêu kết nối
sudo ss -tlnp | grep nginx
Bên ngoài, dùng GTmetrix hoặc PageSpeed Insights:
Bước 7: Monitoring Và Logging
7.1. Xem Log Nginx
# Real-time access log
sudo tail -f /var/log/nginx/access.log
# Real-time error log
sudo tail -f /var/log/nginx/error.log
7.2. Phân Tích Log Với GoAccess
sudo apt install goaccess -y
sudo goaccess /var/log/nginx/access.log -o /var/www/example.com/html/report.html --log-format=COMBINED
7.3. Monitoring Với Netdata
bash <(curl -Ss https://my-netdata.io/kickstart.sh)
Netdata cung cấp dashboard real-time cho CPU, RAM, disk, network và cả Nginx metrics.
Bước 8: Troubleshooting Các Lỗi Thường Gặp
8.1. Lỗi "Port 80 already in use"
Apache đang chạy và chiếm port 80. Dừng Apache:
sudo systemctl stop apache2
sudo systemctl disable apache2
sudo systemctl start nginx
8.2. Lỗi "502 Bad Gateway"
PHP-FPM chưa chạy hoặc socket sai:
sudo systemctl restart php8.3-fpm
sudo systemctl status php8.3-fpm
Kiểm tra đường dẫn socket trong file cấu hình — phải khớp với:
ls /var/run/php/
8.3. Lỗi "404 Not Found"
Kiểm tra root directive và file tồn tại:
ls -la /var/www/example.com/html/
Đảm bảo index directive đúng:
index index.php index.html index.htm;
8.4. Lỗi "413 Request Entity Too Large"
Tăng client_max_body_size:
client_max_body_size 128M;
8.5. Kiểm Tra Cấu Hình Trước Khi Reload
Luôn chạy lệnh này trước khi reload:
sudo nginx -t
Nếu có lỗi cú pháp, Nginx sẽ báo dòng lỗi cụ thể.
| Mã lỗi | Nguyên nhân | Giải pháp |
|---|---|---|
| 502 Bad Gateway | PHP-FPM không chạy hoặc sai socket | Restart PHP-FPM, kiểm tra đường dẫn socket |
| 404 Not Found | Sai đường dẫn root hoặc thiếu index file | Kiểm tra root và index directive |
| 413 Request Entity Too Large | Upload file vượt quá client_max_body_size | Tăng giá trị client_max_body_size |
| Permission Denied | Sai owner/permission thư mục | Chạy chown -R www-data:www-data /var/www/ |
| Address already in use | Port 80/443 bị chiếm bởi Apache | Dừng Apache, khởi động Nginx |
Câu Hỏi Thường Gặp
Nginx khác gì Apache?
Nginx dùng kiến trúc event-driven, xử lý nhiều kết nối với ít tài nguyên hơn Apache. Nginx phù hợp cho website traffic cao và làm reverse proxy. Xem so sánh chi tiết tại bài Apache là gì?.
Có thể cài WordPress trên VPS với Nginx không?
Có. Sau khi hoàn tất các bước trên (đặc biệt là PHP-FPM và MySQL), bạn có thể cài WordPress. Xem hướng dẫn tại Hướng dẫn sử dụng WordPress.
Làm sao để biết Nginx đang hoạt động tốt?
Dùng sudo systemctl status nginx để kiểm tra trạng thái. Dùng htop để giám sát CPU/RAM. Dùng GTmetrix để kiểm tra tốc độ từ bên ngoài.
Nên dùng Nginx hay Apache cho WordPress mới?
Nginx kết hợp PHP-FPM cho hiệu suất tốt hơn Apache, đặc biệt với traffic cao. Nếu bạn dùng shared hosting, nhà cung cấp thường chọn sẵn — nhưng với VPS, Nginx là lựa chọn tối ưu.
Tham khảo thêm bài so sánh Hostinger vs Namecheap nếu bạn đang chọn nhà cung cấp VPS.
Tổng Kết
Bạn đã hoàn thành cài đặt Nginx trên VPS từ A-Z:
- Kết nối và chuẩn bị VPS.
- Cài đặt Nginx và cấu hình firewall.
- Tạo virtual host cho website.
- Tích hợp PHP-FPM.
- Bảo mật server với security headers và rate limiting. Xem hướng dẫn bảo mật server để biết thêm biện pháp.
- Cài SSL Let's Encrypt miễn phí.
- Tối ưu hiệu suất với gzip, cache, worker tuning.
- Monitoring và troubleshooting.
VPS + Nginx là nền tảng vững chắc cho bất kỳ website nào — từ blog WordPress đến ứng dụng web phức tạp. Việc tự tay cài đặt và cấu hình giúp bạn hiểu sâu hệ thống và chủ động tối ưu khi cần.
Nếu bạn cần hỗ trợ thiết kế website chuyên nghiệp hoặc tối ưu hosting, hãy liên hệ RiverLee để được tư vấn chi tiết.
Bình luận
0 bình luận
Đang tải...
Bài viết mới nhất

Tại Sao Chọn NextJS Thay Vì WordPress Cho Dự Án Phức Tạp (2026)
Phân tích chi tiết lý do chọn NextJS thay vì WordPress cho dự án phức tạp — từ hiệu suất, SEO, bảo mật đến khả năng mở rộng. Hướng dẫn thực tế từ chuyên gia thiết kế website.

Thiết Kế Website BĐS Đắk Lắk: Giải Pháp Tăng Trưởng Online (2026)
Giải pháp thiết kế website bất động sản Đắk Lắk chuyên nghiệp — từ SEO địa phương, 7 tính năng không thể thiếu, bảng giá thực tế đến case study khách hàng thực. Dành cho môi giới và chủ đầu tư muốn tăng trưởng online.

Thiết Kế Website Tại Buôn Ma Thuột: Chi Phí, Quy Trình Và Lưu Ý (2026)
Hướng dẫn chi tiết thiết kế website tại Buôn Ma Thuột — bảng giá thực tế 2026, quy trình từ A-Z, các sai lầm cần tránh và checklist 10 tiêu chí chọn đơn vị thiết kế web uy tín tại Đắk Lắk.

Content Pillar Là Gì? Chiến Lược Xây Dựng Nội Dung SEO 2026
Tìm hiểu Content Pillar là gì và cách xây dựng chiến lược nội dung SEO hiệu quả. Hướng dẫn chi tiết về đặc điểm, cấu trúc, quy trình tạo pillar content và đo lường hiệu quả cho website 2026.
Bài viết liên quan

Hướng Dẫn Bảo Mật Server – Các Biện Pháp Cần Thiết Cho Máy Chủ Linux 2026
Hướng dẫn chi tiết 10 biện pháp bảo mật server Linux từ A-Z — SSH hardening, firewall, fail2ban, cập nhật bảo mật, kiểm soát người dùng, bảo vệ dịch vụ, hardening kernel, phát hiện xâm nhập và giám sát log.

Cloud Hosting Là Gì? Lợi Ích Và Khi Nào Nên Sử Dụng — So Sánh Chi Tiết 2026
Cloud Hosting là giải pháp lưu trữ website sử dụng cụm máy chủ đám mây. Tìm hiểu chi tiết về lợi ích, cách hoạt động, so sánh với VPS và khi nào nên sử dụng Cloud Hosting.

Các Lệnh Linux Server Cơ Bản Cho Người Mới Quản Trị Hosting — Cẩm Nang Từ A-Z
Hướng dẫn chi tiết các lệnh Linux server cơ bản cho người mới quản trị hosting. Từ SSH, quản lý file, phân quyền, systemctl, apt, đến xem log — tất cả trong một cẩm nang đầy đủ.

So Sánh Giá Hosting 2026 – Bảng Giá Chi Tiết Các Nhà Cung Cấp Trong Nước & Quốc Tế
Bảng giá hosting 2026 chi tiết nhất — so sánh hơn 15 nhà cung cấp hosting trong nước và quốc tế. Từ Hostinger, Bluehost, SiteGround đến Mắt Bão, PA Vietnam, VinaHost. Hướng dẫn chọn gói hosting phù hợp với ngân sách.

