- 1 API Gateway là gì? Cổng vào thống nhất cho Microservices
- 2 NAT là gì? Network Address Translation trong mạng máy tính
- 3 GitLab CI/CD là gì? Pipeline tự động hóa build, test và deploy
- 4 Kafka là gì? Nền tảng Event Streaming phân tán cho hệ thống lớn
- 5 Serverless là gì? FaaS, Cold Start và khi nào nên dùng Serverless
- 6 Subnet và CIDR là gì? Chia mạng IP và định tuyến hiện đại
- 7 Kubernetes là gì? Nền tảng điều phối container phổ biến nhất hiện nay
- 8 Proxy là gì? Forward Proxy, Reverse Proxy và SOCKS5
- 9 Nginx là gì? Web server, reverse proxy và load balancer trong một
Proxy là một trong những khái niệm mạng xuất hiện khắp nơi nhưng thường bị hiểu nhầm. Forward proxy, reverse proxy, SOCKS5 — mỗi loại phục vụ một mục đích khác nhau. Bài viết giải thích rõ từng loại với ví dụ cấu hình thực tế.
Cần giải pháp dữ liệu cho doanh nghiệp?
AlgoData đồng hành cùng doanh nghiệp về data engineering, phân tích & AI từ 2019.
Proxy là gì?

Proxy (hay proxy server) là server trung gian hoạt động thay mặt cho client hoặc server trong quá trình giao tiếp mạng. Thay vì client kết nối trực tiếp đến server đích, mọi traffic đi qua proxy.
Ưu điểm của proxy:
- Ẩn danh: Che giấu IP thực của client hoặc server
- Cache: Lưu trữ response để phục vụ request lặp lại nhanh hơn (không cần fetch từ origin)
- Kiểm soát truy cập: Chặn hoặc cho phép traffic theo policy
- Load balancing: Phân phối traffic đến nhiều backend server
- SSL termination: Xử lý TLS ở proxy, backend dùng HTTP đơn giản
Có ba loại proxy chính: Forward Proxy, Reverse Proxy, và SOCKS5 Proxy.
Forward Proxy

Forward Proxy đứng giữa client và internet. Client biết mình đang dùng proxy và phải cấu hình tường minh (trong browser, OS, hoặc app).
Luồng traffic:
Client → Forward Proxy → Internet → Server đích
Server đích thấy IP của proxy, không thấy IP thực của client.
Ứng dụng phổ biến:
- Corporate web filtering: IT block các website không phù hợp (social media, game), log web access
- Bypass geo-restriction: Client ở Việt Nam dùng proxy ở Mỹ để truy cập nội dung chỉ dành cho US
- Development: Dev team dùng proxy để debug/intercept HTTP request (Charles Proxy, mitmproxy)
Sau khi cấu hình proxy cho client, luôn kiểm tra bằng curl -x http://proxy:3128 https://httpbin.org/ip hoặc truy cập ifconfig.me qua proxy. Nếu IP trả về vẫn là IP thực của bạn, proxy chưa được áp dụng — thường do biến môi trường http_proxy/https_proxy chưa được set, hoặc app bỏ qua proxy settings.
Squid Forward Proxy — cấu hình cơ bản:
1# Cài đặt Squid
2apt-get install squid
3
4# /etc/squid/squid.conf
5http_port 3128
6
7# Cho phép mạng nội bộ
8acl localnet src 192.168.0.0/16
9acl localnet src 10.0.0.0/8
10http_access allow localnet
11
12# Chặn social media
13acl social dstdomain .facebook.com .tiktok.com .youtube.com
14http_access deny social
15
16# Từ chối tất cả traffic khác
17http_access deny all
1# Test proxy từ client
2curl -x http://proxy-server:3128 https://httpbin.org/ip
3# Response sẽ trả về IP của proxy, không phải IP của client
4
5# Set proxy cho toàn session terminal
6export http_proxy="http://proxy-server:3128"
7export https_proxy="http://proxy-server:3128"
Reverse Proxy

Reverse Proxy đứng trước backend servers. Client (browser) không biết proxy tồn tại — họ tưởng đang kết nối trực tiếp vào server thật. IP của backend hoàn toàn ẩn với client.
Luồng traffic:
Client → Reverse Proxy → Backend Server 1
→ Backend Server 2
→ Backend Server 3
NGINX làm Reverse Proxy:
1# /etc/nginx/sites-available/myapp
2server {
3 listen 80;
4 server_name api.example.com;
5
6 location / {
7 proxy_pass http://localhost:3000;
8 proxy_set_header Host $host;
9 proxy_set_header X-Real-IP $remote_addr;
10 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
11 proxy_set_header X-Forwarded-Proto $scheme;
12 }
13}
14
15# Load balancing với upstream
16upstream backend_pool {
17 server 10.0.1.10:3000 weight=3;
18 server 10.0.1.11:3000 weight=1;
19 server 10.0.1.12:3000 backup;
20}
21
22server {
23 listen 443 ssl;
24 server_name api.example.com;
25
26 location /api/ {
27 proxy_pass http://backend_pool;
28 }
29}
Ứng dụng phổ biến của Reverse Proxy:
- SSL termination: NGINX xử lý TLS, backend chỉ cần HTTP
- Load balancing: Phân phối request đến nhiều instance
- Static file serving: NGINX phục vụ file tĩnh, backend chỉ lo business logic
- Rate limiting: Giới hạn request từ một IP
- Security: Ẩn thông tin backend (version, IP, port)
Header X-Forwarded-For do client gửi lên có thể bị spoofed — attacker có thể tự set X-Forwarded-For: 127.0.0.1 để bypass IP-based rate limiting hoặc whitelist. Nếu backend dùng header này để kiểm soát truy cập, NGINX phải overwrite thay vì append: dùng proxy_set_header X-Forwarded-For $remote_addr (thay vì $proxy_add_x_forwarded_for). Chỉ tin tưởng X-Forwarded-For khi toàn bộ chain proxy nằm trong mạng bạn kiểm soát.
SOCKS5 Proxy

SOCKS5 là proxy hoạt động ở tầng session (OSI Layer 5), không phụ thuộc vào application protocol. Nó tunnel bất kỳ TCP/UDP traffic nào — HTTP, SMTP, FTP, SSH, game traffic...
Tạo SOCKS5 proxy qua SSH tunnel:
1# Tạo SSH SOCKS5 tunnel (port 1080 trên localhost)
2ssh -D 1080 -N -f user@jumphost.example.com
3# -D 1080: tạo SOCKS5 proxy trên port 1080
4# -N: không execute remote command
5# -f: chạy nền (background)
6
7# Test qua SOCKS5
8curl --socks5 127.0.0.1:1080 https://httpbin.org/ip
9curl --socks5-hostname 127.0.0.1:1080 https://ifconfig.me
10
11# Dùng với git (proxy git pull qua SSH tunnel)
12git config --global http.proxy socks5://127.0.0.1:1080
Khi dùng SOCKS5 với nhiều ứng dụng, cần phân biệt hai chế độ: socks5:// (DNS resolve ở máy client trước khi gửi qua proxy) và socks5h:// (DNS resolve do proxy server thực hiện — an toàn hơn vì không lộ DNS query). Với curl, dùng --socks5-hostname để ép hostname gửi nguyên về proxy. Nếu chỉ dùng --socks5, DNS vẫn resolve local và có thể lộ domain bạn đang truy cập qua DNS của ISP.
Cấu hình SOCKS5 trong Python (requests library):
1import requests
2
3proxies = {
4 "http": "socks5://127.0.0.1:1080",
5 "https": "socks5://127.0.0.1:1080",
6}
7
8response = requests.get("https://httpbin.org/ip", proxies=proxies)
9print(response.json()) # IP của proxy, không phải IP thực
SOCKS5 vs HTTP proxy:
| Tiêu chí | HTTP Proxy | SOCKS5 |
|---|---|---|
| Protocol | HTTP/HTTPS chỉ | Mọi TCP/UDP |
| Layer | Application (L7) | Session (L5) |
| Authentication | Basic auth header | Username/password |
| UDP support | Không | Có |
| Dùng cho | Web browsing | Gaming, torrenting, SSH |
Proxy vs VPN
Cả proxy và VPN đều ẩn IP thực và route traffic qua server trung gian, nhưng rất khác nhau về cơ chế:
| Tiêu chí | Proxy | VPN |
|---|---|---|
| Scope | Một ứng dụng | Toàn bộ OS |
| Mã hóa | Tùy loại (HTTP proxy = không) | Luôn mã hóa |
| DNS | App quyết định | Qua VPN (chống DNS leak) |
| Tốc độ | Nhanh hơn | Chậm hơn (overhead mã hóa) |
| Setup | Per-app config | OS-level |
| Use case | Web browsing, dev tools | Remote work, full privacy |

