Nginx Reverse Proxy là gì? Cách cấu hình trên VPS Linux
Tìm hiểu cách reverse proxy tiếp nhận và chuyển tiếp yêu cầu đến ứng dụng trên VPS. Bài viết hướng dẫn cấu hình Nginx cơ bản, kiểm tra hoạt động và xử lý một số lỗi thường gặp.
Nginx thường được biết đến như một web server, nhưng công cụ này còn có thể làm reverse proxy để tiếp nhận yêu cầu từ người dùng rồi chuyển tiếp đến ứng dụng đang chạy trên VPS. Cấu hình này hữu ích khi bạn muốn đưa ứng dụng Node.js, Python hoặc một dịch vụ web khác ra Internet qua tên miền, đồng thời quản lý kết nối tập trung hơn.
Trong bài viết này, bạn sẽ tìm hiểu Nginx Reverse Proxy là gì, cách chuẩn bị VPS Linux và từng bước cấu hình Nginx để chuyển tiếp yêu cầu đến ứng dụng. Ví dụ sử dụng Ubuntu và ứng dụng chạy tại 127.0.0.1:3000; nếu ứng dụng của bạn dùng cổng khác, hãy thay đổi cho phù hợp.
Nginx Reverse Proxy là gì?
Sơ đồ Nginx nhận yêu cầu từ người dùng và chuyển tiếp đến ứng dụng trên VPS
Reverse proxy, hay proxy ngược, là máy chủ đứng giữa người dùng và một hoặc nhiều máy chủ ứng dụng. Thay vì truy cập trực tiếp vào ứng dụng, trình duyệt gửi yêu cầu đến Nginx. Nginx tiếp nhận yêu cầu, chuyển tiếp đến ứng dụng phía sau, nhận phản hồi rồi gửi lại cho trình duyệt.
Có thể hình dung luồng hoạt động như sau:
Người dùng truy cập tên miền, chẳng hạn example.com.
DNS trỏ tên miền đến địa chỉ IP của VPS.
Nginx trên VPS nhận kết nối HTTP hoặc HTTPS.
Nginx chuyển yêu cầu đến ứng dụng nội bộ, ví dụ 127.0.0.1:3000.
Ứng dụng xử lý và trả kết quả về cho Nginx, sau đó Nginx phản hồi người dùng.
Điểm khác biệt với forward proxy là vị trí và mục đích sử dụng. Forward proxy thường đại diện cho phía người dùng khi truy cập dịch vụ bên ngoài. Reverse proxy đại diện cho máy chủ, tiếp nhận lưu lượng từ bên ngoài và chuyển đến các dịch vụ nội bộ.
Vì sao nên dùng reverse proxy VPS?
Khi ứng dụng chạy trực tiếp trên một cổng như 3000, người dùng có thể phải truy cập bằng địa chỉ IP và cổng. Dùng Nginx làm reverse proxy giúp đưa ứng dụng ra sau tên miền và cổng web phổ biến, đồng thời tạo một điểm quản lý kết nối thống nhất.
Một số lợi ích thường gặp gồm:
Ẩn cổng ứng dụng phía sau: Nginx nhận yêu cầu công khai, còn ứng dụng có thể chỉ lắng nghe trên địa chỉ nội bộ của VPS.
Quản lý tên miền: Một máy chủ Nginx có thể định tuyến các tên miền hoặc đường dẫn khác nhau đến những ứng dụng tương ứng.
Hỗ trợ HTTPS tập trung: Nginx có thể tiếp nhận kết nối mã hóa và chuyển tiếp yêu cầu đến ứng dụng phía sau.
Chuyển tiếp thông tin kết nối: Các header như địa chỉ IP của người dùng và giao thức ban đầu có thể được gửi đến ứng dụng.
Tạo nền tảng mở rộng: Khi cần, cấu hình có thể được điều chỉnh để định tuyến đến nhiều dịch vụ hoặc máy chủ ứng dụng.
Reverse proxy không tự động bảo vệ ứng dụng khỏi mọi rủi ro và cũng không thay thế việc cập nhật phần mềm, phân quyền hay cấu hình firewall. Hãy chỉ mở những cổng cần thiết và kiểm tra cách ứng dụng sử dụng các header được chuyển tiếp.
Chuẩn bị trước khi cấu hình
Trước khi bắt đầu, hãy đảm bảo bạn có quyền truy cập VPS bằng SSH với tài khoản có quyền sudo. Ứng dụng cần hoạt động ổn định và có thể truy cập từ chính VPS, chẳng hạn tại 127.0.0.1:3000. Thử kiểm tra phản hồi bằng lệnh:
curl -I http://127.0.0.1:3000
Nếu lệnh không kết nối được, hãy kiểm tra trạng thái ứng dụng, địa chỉ lắng nghe và cổng trước khi cấu hình Nginx. Đồng thời, bạn cần có tên miền đã trỏ bản ghi DNS về IP VPS. Trong ví dụ dưới đây, thay example.com bằng tên miền thực tế của bạn.
Cài đặt Nginx trên Ubuntu hoặc Debian bằng các lệnh:
sudo apt update
sudo apt install nginx
Bật dịch vụ để Nginx tự khởi động cùng hệ thống và khởi chạy ngay:
sudo systemctl enable --now nginx
Nếu VPS bật firewall, hãy cho phép lưu lượng web qua cổng 80; khi thiết lập HTTPS, cần cho phép thêm cổng 443. Cách quản lý firewall phụ thuộc vào cấu hình hệ điều hành và nhà cung cấp VPS.
Cấu hình Nginx Reverse Proxy trên VPS
Quản trị viên thiết lập cấu hình Nginx Reverse Proxy trên VPS Linux
Trên Ubuntu, tạo một tệp cấu hình riêng cho website trong thư mục sites-available:
sudo nano /etc/nginx/sites-available/myapp
Thêm cấu hình sau. Hãy thay example.com bằng tên miền của bạn và đổi cổng 3000 nếu ứng dụng chạy ở cổng khác:
Trong cấu hình này, listen 80 cho Nginx tiếp nhận kết nối HTTP. server_name xác định tên miền áp dụng cho khối máy chủ. location / khớp các đường dẫn bắt đầu từ thư mục gốc, còn proxy_pass chỉ định địa chỉ và cổng của ứng dụng đích.
Các dòng proxy_set_header gửi thông tin cần thiết đến ứng dụng. Ví dụ, Host giữ lại tên miền người dùng truy cập; X-Real-IP và X-Forwarded-For chuyển tiếp thông tin IP; X-Forwarded-Proto cho biết giao thức bên ngoài là HTTP hay HTTPS. Ứng dụng cần được cấu hình để tin cậy các header proxy từ Nginx, thay vì mặc định xem chúng là thông tin đã được xác thực.
Lưu tệp, sau đó tạo liên kết để kích hoạt cấu hình:
Nếu cấu hình mặc định của Nginx hiển thị trang không mong muốn, bạn có thể tắt nó bằng cách xóa liên kết mặc định, nhưng hãy kiểm tra trước để tránh ảnh hưởng website khác đang sử dụng cấu hình đó.
Kiểm tra cú pháp trước khi áp dụng:
sudo nginx -t
Nếu kết quả báo cấu hình hợp lệ, tải lại Nginx:
sudo systemctl reload nginx
Sau đó truy cập tên miền trên trình duyệt hoặc kiểm tra từ dòng lệnh. Nếu DNS chưa cập nhật hoặc chưa trỏ đúng IP, hãy xác minh bản ghi DNS và thử lại sau khi thay đổi có hiệu lực.
Bật HTTPS và kiểm tra hoạt động
Minh họa kết nối HTTPS an toàn qua Nginx đến ứng dụng trên VPS
Sau khi HTTP hoạt động, bạn nên cấu hình HTTPS để mã hóa kết nối giữa trình duyệt và VPS. Trước khi cấp chứng chỉ, hãy xác nhận tên miền trỏ đúng IP máy chủ và cổng 80, 443 có thể truy cập từ Internet. Trên hệ thống Ubuntu tương thích, có thể cài Certbot cùng plugin Nginx rồi yêu cầu công cụ cấu hình chứng chỉ cho tên miền:
Làm theo hướng dẫn hiển thị trên terminal. Sau khi thiết lập, truy cập địa chỉ HTTPS và kiểm tra ứng dụng có trả về đúng nội dung hay không. Nếu Nginx kết thúc kết nối TLS ở phía trước ứng dụng, header X-Forwarded-Proto trong cấu hình sẽ báo cho ứng dụng biết giao thức người dùng sử dụng.
Một số lỗi phổ biến khi kiểm tra reverse proxy VPS:
502 Bad Gateway: Nginx không kết nối được đến ứng dụng. Kiểm tra ứng dụng có đang chạy không, địa chỉ proxy_pass và cổng có chính xác không, đồng thời xác nhận dịch vụ lắng nghe trên địa chỉ mà Nginx truy cập được.
504 Gateway Timeout: Ứng dụng không phản hồi trong thời gian Nginx chờ. Xem log của ứng dụng, kiểm tra tài nguyên VPS và xác định nguyên nhân xử lý chậm trước khi điều chỉnh timeout.
Tên miền hiển thị sai website: Kiểm tra server_name, liên kết cấu hình đã bật và bản ghi DNS của tên miền.
Thay đổi cấu hình không có hiệu lực: Chạy sudo nginx -t rồi reload Nginx. Nếu kiểm tra thất bại, đọc thông báo lỗi để sửa đúng tệp và dòng được nêu.
Bạn có thể xem log lỗi của Nginx bằng sudo tail -f /var/log/nginx/error.log. Log truy cập thường nằm tại /var/log/nginx/access.log. Khi gửi thông tin chẩn đoán cho người khác, hãy rà soát và che dữ liệu nhạy cảm nếu có.
Lưu ý bảo mật khi vận hành
Để hạn chế truy cập trực tiếp đến ứng dụng, hãy cấu hình ứng dụng chỉ lắng nghe trên 127.0.0.1 nếu kiến trúc cho phép. Nếu ứng dụng cần giao tiếp qua mạng riêng, hãy giới hạn truy cập bằng firewall thay vì mở cổng công khai không cần thiết. Nginx và hệ điều hành cũng cần được cập nhật định kỳ.
Khi thay đổi cấu hình, luôn chạy nginx -t trước khi reload. Nếu ứng dụng dùng WebSocket, cần bổ sung các header nâng cấp kết nối phù hợp trong khối location; không nên áp dụng cấu hình tùy tiện nếu ứng dụng không sử dụng tính năng này. Với nhiều dịch vụ trên cùng VPS, hãy tạo các khối server riêng và kiểm tra kỹ tên miền, cổng đích để tránh định tuyến nhầm.
Tổng kết
Nginx Reverse Proxy là lớp trung gian nhận yêu cầu từ người dùng và chuyển tiếp đến ứng dụng trên VPS. Với một khối server, thiết lập proxy_pass và các header chuyển tiếp, bạn có thể đưa ứng dụng nội bộ ra sau tên miền, đồng thời quản lý HTTP và HTTPS tập trung hơn.
Nếu đang triển khai ứng dụng cần một môi trường máy chủ riêng, bạn có thể tham khảo các gói VPS AMD EPYC Gen 3 của VibeVPS từ 81.000đ/tháng. Hãy chọn cấu hình phù hợp với ứng dụng, lưu lượng dự kiến và nhu cầu vận hành của bạn.
Lỗi 403 Forbidden khiến máy chủ từ chối yêu cầu truy cập website. Bài viết hướng dẫn quản trị viên kiểm tra và xử lý lỗi theo từng nguyên nhân phổ biến.
Email theo tên miền giúp doanh nghiệp tạo địa chỉ thư điện tử mang thương hiệu riêng, chuyên nghiệp và dễ quản lý. Tìm hiểu lợi ích, những thứ cần chuẩn bị và các bước thiết lập cơ bản.