🔀 Forward Proxy vs Reverse Proxy

Cùng là "proxy" nhưng hoạt động ngược nhau hoàn toàn

🔵 Forward Proxy

Đứng trước client. Đại diện cho client gửi request đến Internet. Client biết proxy, server không biết client.

🟡 Reverse Proxy

Đứng trước server. Đại diện cho server nhận request từ Internet. Client không biết backend, server biết proxy.

1. Forward Proxy Là Gì?

Forward Proxy (Proxy xuôi):

Client A ──┐
Client B ──┼──→ [Forward Proxy] ──→ Internet ──→ Server
Client C ──┘
              ↑
         Proxy đại diện
         cho CLIENTS

Forward Proxy là server trung gian đứng giữa client và Internet. Client cấu hình để gửi request qua proxy, proxy sẽ gửi request đến server đích thay cho client.

Use cases:

  • Ẩn danh (Anonymity): Server chỉ thấy IP của proxy, không thấy IP client thật
  • Bypass restrictions: Truy cập website bị chặn (VPN hoạt động tương tự)
  • Content filtering: Công ty chặn nhân viên truy cập Facebook, YouTube
  • Caching: Cache response để các client khác dùng lại (ISP proxy)
  • Logging/Monitoring: Theo dõi traffic của users trong mạng LAN
# Squid Forward Proxy - squid.conf
http_port 3128

# Chỉ cho phép mạng nội bộ
acl localnet src 192.168.1.0/24
http_access allow localnet
http_access deny all

# Chặn Facebook
acl blocked_sites dstdomain .facebook.com .youtube.com
http_access deny blocked_sites

# Caching
cache_mem 256 MB
maximum_object_size 100 MB

2. Reverse Proxy Là Gì?

Reverse Proxy (Proxy ngược):

                              ┌──→ Backend 1
Internet ──→ Client ──→ [Reverse Proxy] ──┼──→ Backend 2
                              └──→ Backend 3
                         ↑
                    Proxy đại diện
                    cho SERVERS

Reverse Proxy đứng trước backend servers. Client gửi request đến reverse proxy (nghĩ đó là server thật), proxy chuyển tiếp đến backend phù hợp.

Use cases:

  • Load Balancing: Phân phối traffic giữa nhiều backends
  • SSL Termination: Xử lý HTTPS tại proxy, backend chỉ cần HTTP
  • Caching: Cache static content, giảm tải backend
  • Security: Ẩn IP/port backend, WAF, DDoS protection
  • Compression: Gzip/Brotli response trước khi gửi client
# NGINX Reverse Proxy
server {
    listen 80;
    server_name example.com;

    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;
    }

    location /api/ {
        proxy_pass http://127.0.0.1:8080;
    }
}

3. Bảng So Sánh

Tiêu chí 🔵 Forward Proxy 🟡 Reverse Proxy
Vị trí Trước client Trước server
Đại diện cho Client (users) Server (backend)
Client có biết? Có — client cấu hình proxy Không — client nghĩ đó là server thật
Server có biết? Không — server thấy IP proxy Có — server biết proxy
Mục đích chính Ẩn danh, bypass, filtering Load balancing, SSL, caching, security
Ai cấu hình? Client (hoặc network admin) Server admin / DevOps
Ví dụ Squid, VPN, Corporate proxy NGINX, HAProxy, Cloudflare

4. Ví Dụ Dễ Hiểu

🏠 Ví dụ đời thường:

Forward Proxy = Bạn nhờ một người bạn mua hộ hàng online. Người bán chỉ biết người bạn, không biết bạn.

Reverse Proxy = Bạn gọi đến tổng đài 1900. Tổng đài viên nhận cuộc gọi rồi chuyển đến đúng phòng ban. Bạn không biết phòng ban nào xử lý.

5. Khi Nào Dùng?

Dùng Forward Proxy khi:
• Cần ẩn danh/bypass firewall
• Corporate network filtering
• Kiểm soát truy cập Internet nội bộ

Dùng Reverse Proxy khi:
• Deploy web app production
• Cần SSL termination, load balancing
• Bảo vệ backend servers
• Serve multiple apps trên cùng domain