19 tháng 8, 2026
6 phút đọcTổng hợp kiến thức nền tảng về NGINX: Giải quyết bài toán C10K, ẩn IP Backend, xử lý SSL/TLS, cân bằng tải và giải quyết triệt để sự cố CORS trong hệ thống Web/Microservices.

Tóm tắt bài viết: NGINX không chỉ là Web Server đơn thuần. Khám phá cách NGINX đóng vai trò lá chắn bảo vệ Backend, xử lý hàng vạn kết nối đồng thời (C10K) và tối ưu hiệu năng toàn diện cho ứng dụng của bạn.
Trang chủ chính thức: nginx.org
NGINX (đọc là "Engine-X") là một phần mềm máy chủ mã nguồn mở hiệu năng cao, đóng vai trò là bộ điều khiển giao thông chính ở cổng vào của hệ thống Web/Backend.
NGINX đảm nhận 5 chức năng cốt lõi sau:
Phục vụ trực tiếp các trang web và file tĩnh (HTML, CSS, JS, hình ảnh, video, tài liệu).
Ví dụ: Khi người dùng truy cập
https://example.com/logo.png, NGINX đọc trực tiếp file từ đĩa cứng/RAM và trả về trình duyệt tức thì.
Đứng trước các ứng dụng Backend (Spring Boot, Node.js, Python, Go...) để nhận request từ Client và chuyển tiếp ngầm tới Backend xử lý.
Ví dụ: Client gọi HTTPS cổng 443 (
https://api.example.com/products), NGINX tiếp nhận và âm thầm gọi sang Spring Boot đang chạy nội bộ tạihttp://127.0.0.1:8080/products.
Phân chia lưu lượng truy cập đều giữa các máy chủ Backend phía sau để tránh bị quá tải.
Ví dụ: Khi có 1.000 request tới cùng lúc, NGINX tự động chia 500 request cho Server A và 500 request cho Server B.
Lưu bản sao tạm thời của các phản hồi (Response) từ Backend vào RAM/Ổ đĩa để trả về nhanh chóng mà không cần bắt Backend truy vấn lại Database.
Ví dụ: API danh mục sản phẩm ít thay đổi được NGINX lưu cache vào RAM, trả kết quả siêu tốc cho hàng ngàn người dùng tiếp theo.
Hỗ trợ chuyển tiếp lưu lượng cho các giao thức mạng tầng thấp (MySQL, PostgreSQL, Redis) và các dịch vụ email (IMAP, POP3, SMTP).
Rõ ràng khi phát triển ứng dụng (như Java Spring Boot, Node.js, Python...), bạn vẫn có thể mở trực tiếp port ứng dụng ra ngoài Internet (ví dụ: http://123.45.67.89:8080/api/users).
Tuy nhiên, khi đưa hệ thống ra thực tế (Production), nếu KHÔNG dùng NGINX, bạn sẽ đối mặt với các rủi ro nghiêm trọng sau:
| Vấn đề khi gọi trực tiếp Backend | Giải pháp tối ưu khi có NGINX đứng trước |
|---|---|
| Lộ cổng (Port) & Ẩn danh: Phải mở trực tiếp port ứng dụng (8080, 3000...) ra Internet, đối mặt nguy cơ bị hacker tấn công trực tiếp vào ứng dụng. | Bảo mật & Giấu Backend: Backend được giấu hoàn toàn trong mạng nội bộ. NGINX đứng ngoài tiếp nhận request ở cổng chuẩn HTTPS (443). |
| Backend bị quá tải công việc phụ: Backend phải tự gánh thêm việc giải mã chứng chỉ SSL/TLS, nén dữ liệu Gzip, phục vụ file tĩnh... ngốn rất nhiều CPU/RAM. | SSL Termination & Offloading: NGINX gánh hết việc mã hóa HTTPS, nén dữ liệu và file tĩnh. Backend giải phóng tài nguyên để tập trung xử lý logic. |
| Không thể mở rộng (Scale Out): Khi chạy 3 server Backend (A, B, C), Client không biết phải gọi vào IP nào. Nếu Server A hỏng, hệ thống ngắt kết nối ngay. | Load Balancing & Health Check: NGINX làm địa chỉ duy nhất, tự chia đều tải cho các server và tự ngắt điều hướng nếu có server bị sập. |
| Rắc rối CORS & Phân tán IP: Trình duyệt chặn request (lỗi CORS) khi Web Frontend gọi tới các dịch vụ Backend có IP/Port khác nhau. | Gộp về 1 Domain duy nhất: Frontend chỉ cần gọi tới 1 domain (https://api.com/users). NGINX điều hướng ngầm tới các port tương ứng, triệt tiêu lỗi CORS. |
mywebsite.com) gọi API lấy danh sách sản phẩm tại http://10.0.0.1:8081/products. Vì khác Domain/Port, trình duyệt coi đây là nguồn xa lạ và chặn request ngay (Lỗi CORS)./api/products ngay trên cùng domain https://mywebsite.com/api/products. NGINX nhận request và chuyển tiếp ngầm sang http://10.0.0.1:8081/products. Trình duyệt thấy cùng domain nên cho phép chạy mượt mà không bao giờ bị CORS.Trong các kiến trúc hệ thống hiện đại từ Monolith đến Microservices, NGINX mang lại 4 lợi ích cốt lõi:
NGINX đóng vai trò như một bộ điều phối giao thông thông minh ở cửa ngõ hệ thống: vừa bảo vệ an ninh, vừa cân bằng tải cho các máy chủ Backend, vừa tối ưu tốc độ phản hồi file tĩnh và API cho người dùng cuối.