Dùng Nginx reverse proxy + SSL để chạy nhiều web/app trên một VPS

Bài viết này giải thích reverse proxy bằng ví dụ thực tế, đồng thời chỉ cách tổ chức nhiều site hoặc app trên cùng một VPS mà không xung đột cổng. Mục tiêu là triển khai được kiến trúc nhiều domain, nhiều service và vẫn có SSL riêng cho từng domain.
| Trả lời nhanh: Nginx reverse proxy cho phép nhận request từ domain bên ngoài rồi chuyển tiếp đến các ứng dụng chạy nội bộ, nhờ đó một VPS có thể phục vụ nhiều web/app và vẫn dùng SSL riêng cho từng domain. |
Nếu bạn đang chuẩn bị dựng hạ tầng, có thể xem thêm Docker Compose, DNS và Bảng giá dịch vụ để chọn nền tảng phù hợp trước khi public nhiều app ra internet.
Reverse proxy là gì?
Reverse proxy là lớp trung gian đứng trước các ứng dụng nội bộ. Người dùng chỉ nhìn thấy domain công khai, còn Nginx sẽ nhận request rồi chuyển tiếp đến service đúng ở phía sau.
Cách làm này giúp bạn che bớt cấu trúc bên trong, gom SSL về một nơi quản lý và điều phối nhiều ứng dụng chạy trên cùng một máy chủ mà không phải mở trực tiếp tất cả cổng ra ngoài.

Nginx reverse proxy giúp một VPS phục vụ nhiều domain và nhiều ứng dụng
Nginx đóng vai trò gì trong mô hình này?
Nginx thường nhận request từ internet, xử lý HTTPS, nén tài nguyên, cache tĩnh ở mức phù hợp và chuyển tiếp request đến app nội bộ qua proxy_pass. Vì vậy, Nginx vừa là cổng vào vừa là lớp bảo vệ đầu tiên của hệ thống.
Kiến trúc chạy nhiều app trên cùng một VPS
Một cấu trúc thực tế thường là client -> Nginx -> app nội bộ -> database hoặc service liên quan. Mỗi domain hoặc subdomain sẽ có một server block riêng, rồi trỏ về service tương ứng trên localhost hoặc network nội bộ.
Cấu hình server block cho từng domain
Mỗi domain/subdomain nên có một server block riêng để tránh xung đột. Trong block đó, bạn khai báo server_name, cấu hình SSL, rồi dùng proxy_pass để đẩy request về đúng app đang chạy phía sau.
proxy_pass hoạt động như thế nào?
proxy_pass nói với Nginx rằng request hiện tại phải được chuyển đến một upstream cụ thể, thường là một container, một port nội bộ hoặc một service phía sau reverse proxy.
Cách tránh xung đột giữa các container/app
Không nên public trực tiếp tất cả service ra internet. Hãy để app chạy trên port nội bộ hoặc network riêng, rồi cho Nginx quản lý điểm vào duy nhất ở tầng public.
Cấp và gia hạn SSL tự động
Khi có nhiều domain, SSL thủ công sẽ rất tốn công nếu phải gia hạn từng cái. Cách thực tế hơn là dùng Certbot hoặc giải pháp tương đương để cấp và gia hạn chứng chỉ tự động cho từng server block.

Server block và SSL tự động là bộ khung chuẩn khi public nhiều app
Checklist triển khai thực tế
| Bước | Việc cần làm | Kết quả |
| 1 | Cài Nginx và mở port 80/443 | Có cổng public an toàn |
| 2 | Tạo server block cho từng domain | Không xung đột giữa các app |
| 3 | Cấu hình proxy_pass về service nội bộ | Request đi đúng nơi |
| 4 | Cấp SSL tự động cho từng domain | HTTPS hoạt động riêng biệt |
| 5 | Kiểm tra log và reload cấu hình | Triển khai ổn định, dễ debug |
Ví dụ kiến trúc nhiều app
Ví dụ thực tế: app1.domain.com có thể trỏ vào service A, app2.domain.com trỏ vào service B, còn domain chính có thể phục vụ website public. Tất cả vẫn nằm trên một VPS nhưng được tách rõ ở tầng reverse proxy.
Một VPS chạy WordPress, API và dashboard nội bộ qua Nginx reverse proxy là mô hình rất phổ biến, đặc biệt khi bạn muốn dễ quản lý SSL và không phải mở nhiều port ra internet.
Lỗi thường gặp và cách xử lý
Domain trỏ đúng nhưng app không lên
Hãy kiểm tra service nội bộ có chạy không, port upstream có đúng không và Nginx có được reload sau khi sửa cấu hình hay chưa.
SSL cấp xong nhưng trình duyệt vẫn báo lỗi
Thường là do server block chưa đúng server_name, thiếu redirect từ HTTP sang HTTPS hoặc chứng chỉ chưa khớp với domain đang truy cập.
Nhiều site cùng VPS nhưng bị chậm
Reverse proxy giúp chia domain, nhưng giới hạn cuối cùng vẫn là CPU, RAM và IO của VPS. Nếu app nhiều và nặng, hãy cân nhắc tối ưu hoặc nâng cấp hạ tầng.
FAQ
Có thể chạy bao nhiêu website trên một VPS?
Tùy tài nguyên và cách tối ưu. Reverse proxy giúp chia nhiều domain, nhưng giới hạn thực sự vẫn là CPU, RAM và IO của máy chủ.
Nginx reverse proxy có bắt buộc cho Docker không?
Không bắt buộc, nhưng rất phổ biến khi public nhiều service ra internet vì nó gom SSL, routing và logging về một nơi.
SSL có thể tự gia hạn không?
Có. Nếu dùng Certbot hoặc giải pháp tương đương, bạn có thể tự động gia hạn chứng chỉ mà không cần thao tác thủ công từng lần.
Có nên mở trực tiếp port app ra internet không?
Không nên nếu app đó không cần public trực tiếp. Việc để Nginx đứng trước thường an toàn và dễ quản trị hơn.
Kết luận
Nginx reverse proxy + SSL là mô hình rất hợp lý khi bạn cần chạy nhiều web hoặc app trên cùng một VPS. Nó giải quyết đồng thời bài toán phân tuyến domain, bảo mật, quản lý SSL và vận hành nhiều service trong một kiến trúc rõ ràng.
Nếu bạn muốn ghép bài này với Docker Compose hoặc cần gói VPS phù hợp hơn, hãy xem Docker Compose, Tên miền hoặc Liên hệ để chốt triển khai.



Dịch Vụ Liên Quan
Cài Docker trên VPS và triển khai ứng dụng bằng Docker Compose
Bài viết này giúp bạn hiểu Docker theo cách gắn với triển khai thực tế trên VPS Linux: cài Docker...
Xem thêm