Reverse Proxy là gì? Một số ứng dụng cụ thể

5 min read

Reverse proxy là một máy chủ đứng giữa người dùng cuối và máy chủ chính (back-end server), nhận các yêu cầu từ người dùng cuối và chuyển tiếp chúng đến máy chủ đích. Nó cũng có nhiệm vụ nhận phản hồi từ máy chủ đích và gửi lại cho người dùng cuối. Trong kiến trúc mạng, reverse proxy đóng vai trò như một trung gian giúp cải thiện hiệu suất, bảo mật và khả năng mở rộng của các ứng dụng web.

Phương Thức Hoạt Động

Reverse proxy hoạt động theo cơ chế sau:

  1. Người dùng gửi yêu cầu: Khi người dùng gửi yêu cầu đến một trang web hoặc ứng dụng, yêu cầu đó sẽ được chuyển đến reverse proxy thay vì trực tiếp đến máy chủ đích.
  2. Reverse proxy xử lý yêu cầu: Reverse proxy sẽ xử lý yêu cầu này. Nếu nó có thể xử lý yêu cầu (ví dụ như yêu cầu tài nguyên tĩnh được lưu trữ trong bộ nhớ cache), nó sẽ gửi phản hồi trực tiếp đến người dùng.
  3. Chuyển tiếp yêu cầu: Nếu reverse proxy không thể xử lý yêu cầu, nó sẽ chuyển tiếp yêu cầu đó đến một hoặc nhiều máy chủ đích (back-end servers).
  4. Nhận phản hồi: Máy chủ đích xử lý yêu cầu và gửi phản hồi lại cho reverse proxy.
  5. Gửi phản hồi cho người dùng: Reverse proxy nhận phản hồi từ máy chủ đích và chuyển tiếp phản hồi này đến người dùng cuối.

Lợi Ích của Reverse Proxy

Reverse proxy mang lại nhiều lợi ích cho các hệ thống mạng và ứng dụng web:

  • Cải thiện hiệu suất: Reverse proxy có thể lưu trữ các tài nguyên tĩnh trong bộ nhớ cache, giảm tải cho máy chủ đích.
  • Cân bằng tải: Reverse proxy có thể phân phối các yêu cầu đến nhiều máy chủ đích để đảm bảo cân bằng tải, giúp tối ưu hóa tài nguyên và tăng tính khả dụng.
  • Bảo mật: Reverse proxy giúp ẩn máy chủ đích khỏi người dùng cuối, làm giảm nguy cơ tấn công trực tiếp. Nó cũng có thể thực hiện các chức năng bảo mật như mã hóa SSL/TLS, lọc IP, và bảo vệ khỏi các cuộc tấn công DDoS.
  • Quản lý lưu lượng: Reverse proxy giúp quản lý và điều hướng lưu lượng truy cập đến các máy chủ đích dựa trên các quy tắc cấu hình.

Một Số Loại Reverse Proxy Thường Dùng

Có nhiều công cụ và phần mềm có thể được sử dụng để triển khai reverse proxy. Một số loại phổ biến bao gồm:

Nginx

Nginx là một trong những phần mềm reverse proxy phổ biến nhất, được biết đến với hiệu suất cao và khả năng mở rộng. Nginx có thể xử lý hàng nghìn kết nối đồng thời, là lựa chọn lý tưởng cho các ứng dụng web yêu cầu hiệu suất cao và độ tin cậy.

Apache HTTP Server

Apache HTTP Server, hay còn gọi là Apache, cũng có thể được cấu hình như một reverse proxy. Apache rất linh hoạt và có nhiều module hỗ trợ cho các chức năng khác nhau, bao gồm cả reverse proxy.

HAProxy

HAProxy là một phần mềm mã nguồn mở chuyên dụng cho cân bằng tải và reverse proxy. HAProxy thường được sử dụng trong các hệ thống yêu cầu độ tin cậy và hiệu suất cao, và nó hỗ trợ cả giao thức HTTP và TCP.

Traefik

Traefik là một reverse proxy hiện đại được thiết kế cho các kiến trúc microservices và container, như Docker và Kubernetes. Traefik có thể tự động cấu hình và phát hiện các dịch vụ, giúp đơn giản hóa việc triển khai và quản lý.

Ví Dụ Thực Tế Sử Dụng Nginx

Cài Đặt Nginx

Để cài đặt Nginx trên một hệ thống Linux, bạn có thể sử dụng lệnh sau:

sudo apt update
sudo apt install nginx

Cấu Hình Nginx làm Reverse Proxy

Sau khi cài đặt, bạn có thể cấu hình Nginx làm reverse proxy bằng cách chỉnh sửa file cấu hình Nginx. File cấu hình Nginx thường nằm tại /etc/nginx/nginx.conf hoặc /etc/nginx/sites-available/default.

Dưới đây là một ví dụ cấu hình Nginx làm reverse proxy cho một ứng dụng web chạy trên máy chủ đích với địa chỉ http://backend-server:3000:

server {
    listen 80;

    server_name example.com;

    location / {
        proxy_pass http://backend-server: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;
    }
}

Trong cấu hình này:

  • listen 80: Nginx lắng nghe các yêu cầu HTTP trên cổng 80.
  • server_name example.com: Tên miền của trang web.
  • location /: Tất cả các yêu cầu đến Nginx sẽ được chuyển tiếp đến http://backend-server:3000.
  • proxy_set_header: Các tiêu đề HTTP được thiết lập để giữ lại thông tin về yêu cầu gốc.

Kiểm Tra và Khởi Động Lại Nginx

Sau khi chỉnh sửa file cấu hình, bạn cần kiểm tra và khởi động lại Nginx để áp dụng thay đổi:

sudo nginx -t
sudo systemctl restart nginx

Ví Dụ Node.js Đơn Giản

Dưới đây là một ví dụ về ứng dụng Node.js đơn giản chạy trên máy chủ đích:

// app.js
const express = require('express');
const app = express();

app.get('/', (req, res) => {
    res.send('Hello from the backend server!');
});

app.listen(3000, () => {
    console.log('Backend server is running on port 3000');
});

Chạy ứng dụng này bằng lệnh:

node app.js

Kiểm Tra Reverse Proxy

Mở trình duyệt web và truy cập http://example.com, bạn sẽ thấy phản hồi từ ứng dụng Node.js backend thông qua Nginx reverse proxy: “Hello from the backend server!”.

Kết Luận

Reverse proxy là một thành phần quan trọng trong các hệ thống web hiện đại, mang lại nhiều lợi ích về hiệu suất, bảo mật và khả năng mở rộng. Việc hiểu rõ và triển khai reverse proxy có thể giúp tối ưu hóa hoạt động của các ứng dụng web và đảm bảo chúng có thể xử lý lưu lượng lớn một cách hiệu quả.

Hy vọng qua bài viết này, bạn đã có cái nhìn tổng quan về reverse proxy, các loại phổ biến và cách triển khai thực tế sử dụng Nginx. Việc áp dụng reverse proxy trong hệ thống của bạn có thể mang lại nhiều lợi ích lâu dài và giúp hệ thống hoạt động mượt mà hơn.

Reference

Proxy vs Reverse Proxy (Real-world Examples) (youtube.com)

Avatar photo

Leave a Reply

Your email address will not be published. Required fields are marked *