# Nginx là gì? Reverse proxy, HTTPS, giới hạn tốc độ và những lỗi cấu hình hay gặp

URL: https://opcaios.org/blog/nginx-la-gi
Ngày: 2026-11-03
Cập nhật: 2026-10-25
Tác giả: Lê Quốc Nghĩa
Chuyên mục: Hướng dẫn

Nginx là gì? Nginx (đọc là "engine-x") là phần mềm máy chủ web và máy chủ proxy ngược (reverse proxy), cũng làm proxy cho thư và cân bằng tải. Theo Wikipedia, nginx do Igor Sysoev viết bằng ngôn ngữ C, phát hành lần đầu ngày 4/10/2004, giấy phép BSD 2 điều khoản (còn bản trả phí NGINX Plus là phần mềm độc quyền); công ty Nginx, Inc. thành lập năm 2011 và được F5 mua lại tháng 3/2019 với giá $670 triệu. Cũng theo Wikipedia, tính đến tháng 4/2025 số liệu của W3Techs xếp nginx đứng đầu trong các máy chủ web với 33,8% số website. Bài này giải thích nginx là gì, cách nó hoạt động, những việc thường dùng (proxy ngược, HTTPS, giới hạn tốc độ), một cấu hình mẫu, các lỗi cấu hình hay gặp theo tài liệu chính thức, và kinh nghiệm thật của OPCAIOS khi đặt nginx trước ứng dụng Next.js.

![Sơ đồ nginx: người dùng tới nginx nhận HTTPS, nginx chuyển yêu cầu tới ứng dụng chạy nội bộ, giới hạn tốc độ và các lớp kiểm tra cấu hình](https://opcaios.org/images/blog/nginx-la-gi/so-do.webp)
*Nginx đứng ở cửa: kết thúc HTTPS, giới hạn tốc độ rồi chuyển yêu cầu tới ứng dụng chạy nội bộ. Sơ đồ: OPCAIOS.*

## Nginx hoạt động như thế nào?

Nginx có một tiến trình chủ và nhiều tiến trình làm việc. Theo hướng dẫn nhập môn chính thức, tiến trình chủ đọc và đánh giá cấu hình rồi duy trì các tiến trình làm việc; các tiến trình làm việc mới thật sự xử lý yêu cầu. Nginx dùng mô hình hướng sự kiện và cơ chế của hệ điều hành để chia yêu cầu cho các tiến trình làm việc; số tiến trình đặt trong cấu hình, có thể cố định hoặc tự điều chỉnh theo số nhân CPU. Cách nginx và các mô-đun hoạt động do tệp cấu hình quyết định.

Điều khiển nginx bằng tham số `-s`: `stop` (dừng nhanh), `quit` (dừng nhẹ nhàng), `reload` (nạp lại cấu hình) và `reopen` (mở lại tệp nhật ký). Thay đổi trong tệp cấu hình chỉ có hiệu lực sau khi bạn gửi lệnh nạp lại hoặc khởi động lại. Trước đó hãy kiểm tra bằng `nginx -t`: theo tài liệu, lệnh này kiểm tra cú pháp rồi thử mở các tệp được nhắc tới trong cấu hình.

## Nginx dùng để làm gì?

- **Phục vụ tệp tĩnh:** ảnh, CSS, JavaScript.
- **Proxy ngược:** nhận yêu cầu rồi chuyển tới ứng dụng chạy nội bộ (Node.js, PHP-FPM, Python...), trả kết quả về cho người dùng.
- **Kết thúc HTTPS:** nginx giữ chứng chỉ và giải mã TLS, ứng dụng phía sau nói chuyện HTTP thường trên máy nội bộ.
- **Cân bằng tải:** theo tài liệu proxy, nếu tên miền trong `proxy_pass` trỏ tới nhiều địa chỉ thì nginx dùng tất cả theo kiểu luân phiên (round-robin); có thể định nghĩa nhóm máy chủ (upstream).
- **Giới hạn tốc độ:** mô-đun `limit_req` giới hạn tốc độ xử lý yêu cầu theo một khoá, ví dụ theo địa chỉ IP.
- **Nén nội dung (gzip), lưu đệm, chuyển hướng.**

## Cấu hình mẫu cho ứng dụng Node.js hoặc Next.js

Dưới đây là cấu hình ví dụ, dựa trên tài liệu của Nginx (đọc ngày 23/10/2026); hãy thay tên miền, đường dẫn chứng chỉ và cổng bằng giá trị của bạn:

```nginx
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols       TLSv1.2 TLSv1.3;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /dang-nhap {
        limit_req zone=login burst=5;
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host              $host;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
```

Giải thích các điểm chính theo tài liệu:

- `limit_req_zone` định nghĩa vùng nhớ chung (ở ví dụ là 10 MB, tốc độ 5 yêu cầu mỗi phút cho mỗi IP); `limit_req` áp dụng vùng đó cho một `location` với `burst` là số yêu cầu vượt mức được chấp nhận tạm thời. Mô-đun dùng phương pháp "xô rò" (leaky bucket): yêu cầu vượt tốc độ bị trì hoãn, vượt cả burst thì bị từ chối bằng lỗi. Mặc định burst bằng 0.
- `ssl_protocols TLSv1.2 TLSv1.3` chỉ cho phép các phiên bản TLS hiện đại. Theo tài liệu HTTPS, chứng chỉ máy chủ là thông tin công khai gửi cho mọi máy khách còn khoá riêng cần lưu trong tệp có quyền hạn chế nhưng tiến trình chủ của nginx phải đọc được.
- `proxy_pass http://127.0.0.1:3000` chuyển yêu cầu tới ứng dụng đang nghe ở địa chỉ nội bộ; ứng dụng không cần mở ra Internet.

## Những lỗi cấu hình nginx hay gặp là gì?

Lỗi cấu hình nginx là những sai sót khiến cấu hình không có hiệu lực hoặc ứng dụng phía sau nhận sai thông tin. Bốn lỗi hay gặp nhất, theo tài liệu chính thức của Nginx (đọc ngày 23/10/2026), là:

1. **Quên nạp lại cấu hình:** sửa tệp xong nhưng chưa chạy `nginx -t` rồi `nginx -s reload`, nên không có gì thay đổi. Luôn kiểm tra trước khi nạp.
2. **Ứng dụng nhận sai tên miền:** mặc định nginx đặt tiêu đề `Host` gửi tới máy chủ phía sau là `$proxy_host` (địa chỉ trong `proxy_pass`), không phải tên miền gốc người dùng gõ. Nếu ứng dụng cần tên miền gốc, hãy đặt `proxy_set_header Host $host`.
3. **Mất tiêu đề do kế thừa:** các lệnh `proxy_set_header` chỉ được kế thừa từ cấp trước nếu ở cấp hiện tại không khai báo lệnh nào. Vì vậy khối `location /dang-nhap` ở ví dụ trên phải khai báo lại các tiêu đề cần thiết.
4. **Thấy sai địa chỉ IP của khách khi có Cloudflare hoặc proxy khác:** nginx chỉ thấy IP của proxy. Mô-đun `realip` đổi địa chỉ khách theo `real_ip_header`, nhưng chỉ tin các địa chỉ liệt kê bằng `set_real_ip_from`, và phải bật bằng tham số biên dịch `--with-http_realip_module` (kiểm tra bằng `nginx -V`).

### Lỗi chứng chỉ và tải TLS là gì?

Hai lỗi còn lại liên quan tới HTTPS. Đầu tiên, thiếu chuỗi chứng chỉ: chứng chỉ máy chủ cần kèm chuỗi trung gian, nên hãy dùng tệp `fullchain` do Let's Encrypt cấp. Tiếp theo, tải TLS cao: theo tài liệu "Configuring HTTPS servers" của nginx.org, có thể giảm chi phí bắt tay bằng bộ nhớ đệm phiên SSL chung với `ssl_session_cache shared:SSL:10m`, trong đó 1 MB chứa khoảng 4.000 phiên và thời gian mặc định là 5 phút. Ví dụ, một website Next.js đặt sau nginx bằng chứng chỉ Let's Encrypt nên chạy `nginx -t` mỗi khi gia hạn chứng chỉ hoặc đổi cấu hình, để tránh nạp một cấu hình lỗi.

## Làm sao đặt nginx phía sau Cloudflare cho an toàn?

Đặt nginx phía sau Cloudflare an toàn nghĩa là máy chủ gốc chỉ nhận kết nối từ Cloudflare và vẫn biết địa chỉ thật của khách. Đầu tiên, cấu hình nginx chỉ chấp nhận các dải IP của Cloudflare; Danh sách dải IP chính thức, theo Cloudflare (theo Cloudflare), đổi theo thời gian nên cần cập nhật định kỳ. Tiếp theo, dùng mô-đun `realip` với `real_ip_header` và `set_real_ip_from` để khôi phục địa chỉ khách, vì nếu không nginx chỉ thấy IP của Cloudflare. Theo tài liệu nginx.org (đọc ngày 23/10/2026), mô-đun này phải được bật bằng tham số biên dịch `--with-http_realip_module`, nên hãy kiểm tra bản của bạn bằng `nginx -V`. Cuối cùng, chạy `nginx -t` trước mỗi lần `reload`. Ví dụ, khi Cloudflare đổi danh sách IP, cần cập nhật cả cấu hình khôi phục IP thật lẫn cấu hình chặn truy cập thẳng, như OPCAIOS làm với VPS của mình. Xem tổng quan trong [Cloudflare là gì?](/blog/cloudflare-la-gi) và lớp bảo mật của máy chủ trong [VPS là gì?](/blog/vps-la-gi).

## Kinh nghiệm của OPCAIOS khi dùng nginx

OPCAIOS dùng nginx trên VPS làm cửa vào cho website: kết thúc HTTPS bằng chứng chỉ do Certbot cấp, chuyển yêu cầu tới ứng dụng Next.js do pm2 quản lý đang nghe ở địa chỉ nội bộ, và dùng nhiều khối `server` cho các tên miền con. Ba bài học chúng tôi rút ra:

1. **Chỉ nhận Cloudflare ở máy chủ gốc:** một bản đồ địa chỉ (geo map) và một đoạn cấu hình dùng chung làm cho truy cập thẳng bằng IP của VPS bị từ chối. Hệ quả: khi kiểm tra sức khoẻ phải đi qua tên miền, và khi Cloudflare đổi danh sách IP thì phải cập nhật cả cấu hình khôi phục IP thật lẫn cấu hình chặn.
2. **Triển khai không gián đoạn:** nginx giữ website chạy trong lúc ứng dụng được dựng bản mới và đổi bản; từng có giai đoạn dựng thẳng trên bản đang chạy làm các tệp tĩnh của bản cũ biến mất khiến trang lỗi 1 đến 2 phút. Khi lọc nhật ký truy cập để tìm lỗi này, nhớ lọc cả mã 400 chứ không chỉ 404.
3. **Cấu hình chạy kiểm tra trước khi nạp:** luôn `nginx -t` rồi mới `reload`, đặc biệt khi AI hỗ trợ sửa cấu hình; xem thêm các lưu ý trong [Vibe coding là gì?](/blog/vibe-code-la-gi). Chúng tôi không công bố tên tệp, đường dẫn hay địa chỉ cụ thể của cấu hình.

## Khi nào dùng nginx và khi nào dùng thứ khác?

Nên dùng nginx khi bạn tự vận hành máy chủ và cần một cửa vào nhẹ, bền, cấu hình được chi tiết cho HTTPS, proxy và giới hạn tốc độ. Số liệu của W3Techs (đọc ngày 23/10/2026), theo Wikipedia, xếp nginx đứng đầu các máy chủ web với 33,8% số website tính đến tháng 4/2025, nên tài liệu và ví dụ cấu hình rất phong phú. Có ba trường hợp cân nhắc hướng khác:

1. Website nhỏ không muốn quản lý máy chủ: nền tảng triển khai được quản lý (PaaS) có thể đủ.
2. Cần lớp phân phối và bảo vệ đứng trước: Cloudflare làm được việc này, xem [Cloudflare là gì?](/blog/cloudflare-la-gi).
3. Chạy bằng Docker: nhớ cổng công bố của container có thể bỏ qua tường lửa; xem [Docker là gì?](/blog/docker-la-gi).

Ví dụ giả định: một đội hai người chạy ứng dụng Next.js trên một VPS sẽ cần nginx để kết thúc HTTPS, còn một trang giới thiệu tĩnh trên nền tảng được quản lý thì không. Muốn dựng VPS từ đầu, xem [VPS là gì?](/blog/vps-la-gi).

## Câu hỏi thường gặp

### Nginx là gì?
Là phần mềm máy chủ web và proxy ngược mã nguồn mở (giấy phép BSD 2 điều khoản) do Igor Sysoev viết, phát hành năm 2004, dùng để phục vụ tệp tĩnh, chuyển yêu cầu tới ứng dụng, kết thúc HTTPS, cân bằng tải và giới hạn tốc độ.

### Proxy ngược là gì và để làm gì?

Proxy ngược (reverse proxy) là máy chủ đứng trước ứng dụng, nhận yêu cầu từ người dùng rồi chuyển tới ứng dụng chạy nội bộ và trả kết quả về. Nginx làm việc này bằng lệnh `proxy_pass`; theo Wikipedia (đọc ngày 23/10/2026), nginx do Igor Sysoev viết và phát hành lần đầu ngày 4/10/2004. Công ty Nginx, Inc. được F5 mua lại tháng 3/2019 với giá $670 triệu. Lợi ích chính gồm:

1. Kết thúc HTTPS ở một chỗ: nginx giữ chứng chỉ và giải mã TLS, còn ứng dụng phía sau nói chuyện HTTP thường trên máy nội bộ.
2. Che ứng dụng khỏi Internet: Node.js hay Next.js chỉ nghe ở địa chỉ nội bộ.
3. Giới hạn tốc độ bằng mô-đun `limit_req`, ví dụ 5 yêu cầu mỗi phút cho mỗi địa chỉ IP ở trang đăng nhập.
4. Cân bằng tải: theo tài liệu proxy của nginx.org, nếu tên miền trong `proxy_pass` trỏ tới nhiều địa chỉ thì nginx dùng tất cả theo kiểu luân phiên (round-robin).

Ví dụ, một ứng dụng Next.js chạy ở cổng nội bộ có thể đứng sau nginx bằng đúng một khối `location /`, như cấu hình mẫu bên dưới.

### Làm sao kiểm tra cấu hình nginx trước khi áp dụng?
Chạy `nginx -t` để kiểm tra cú pháp và việc mở các tệp được nhắc tới, rồi `nginx -s reload` để nạp lại cấu hình mà không làm gián đoạn các yêu cầu đang xử lý.

### Vì sao ứng dụng đằng sau nginx nhận sai tên miền hoặc IP?
Mặc định nginx gửi tiêu đề Host là `$proxy_host`, nên cần `proxy_set_header Host $host`; còn IP khách thật phải được chuyển bằng các tiêu đề như X-Forwarded-For hoặc khôi phục bằng mô-đun `realip` với danh sách địa chỉ tin cậy.

### Có cần nginx khi đã dùng Cloudflare không?

Không bắt buộc, nhưng nginx vẫn hữu ích trên máy chủ gốc ngay cả khi đã có Cloudflare. Cloudflare là lớp phân phối và bảo vệ đứng ngoài, còn nginx là cửa vào đứng ngay trước ứng dụng trên VPS. Nginx đảm nhận ba việc: kết thúc HTTPS bằng chứng chỉ như Let's Encrypt, chuyển yêu cầu tới ứng dụng Next.js hay Node.js chạy nội bộ, và giới hạn truy cập chỉ từ các dải IP của Cloudflare. Ví dụ, OPCAIOS dùng nginx cùng Cloudflare và Certbot cho website của mình, nên truy cập thẳng bằng IP của VPS bị từ chối. Muốn học cách dựng và vận hành hạ tầng website an toàn, xem [khoá đào tạo ứng dụng AI](/services/dao-tao-ung-dung-ai) của OPCAIOS.

*Nguồn: tài liệu chính thức nginx.org (Beginner's Guide, ngx_http_proxy_module, ngx_http_limit_req_module, ngx_http_realip_module, Configuring HTTPS servers, Command-line parameters), Wikipedia "Nginx" (lịch sử, giấy phép, mua lại, số liệu W3Techs), đọc trực tiếp ngày 23/10/2026. Số liệu thị phần là của W3Techs theo Wikipedia và thay đổi theo thời gian. Cấu hình mẫu là ví dụ minh hoạ, hãy điều chỉnh theo hệ thống của bạn. Kinh nghiệm vận hành là của OPCAIOS.*
