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
Thuộc danh mục: Kiến Thức Hosting|Đăng bởi: Lê Thanh Giang|||13 min read
Facebook share iconLinkedIn share iconTwitter share iconPinterest share iconTumblr share icon
Hướng Dẫn Cài Đặt Nginx Trên VPS Từ A-Z – Ubuntu 22.04/24.04

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.

Cài đặt Nginx trên VPS

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.

Kết nối SSH vào VPS

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
Trang Welcome to Nginx

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ẫnMô tả
/etc/nginx/nginx.confFile 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.logLog truy cập
/var/log/nginx/error.logLog 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/default thay 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.php sau 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:

  1. Xác thực domain.
  2. Cấp chứng chỉ SSL.
  3. 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ì?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í.

Cài đặt SSL Let's Encrypt cho Nginx

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ỗiNguyên nhânGiải pháp
502 Bad GatewayPHP-FPM không chạy hoặc sai socketRestart PHP-FPM, kiểm tra đường dẫn socket
404 Not FoundSai đường dẫn root hoặc thiếu index fileKiểm tra rootindex directive
413 Request Entity Too LargeUpload file vượt quá client_max_body_sizeTăng giá trị client_max_body_size
Permission DeniedSai owner/permission thư mụcChạy chown -R www-data:www-data /var/www/
Address already in usePort 80/443 bị chiếm bởi ApacheDừ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

Bài viết liên quan

Newsletter border

Đăng ký để nhận tin từ RiverLee