Hướng dẫn sử dụng protocol Proxy cho các server backend Webapp

Cập nhật lần cuối: 2025/02/27 13:29:44

ĐIỀU KIỆN

  • Đăng nhập tài khoản vào CMC Cloud Portal
  • Đã khởi tạo VPC
  • Đã khởi tạo Elastic Compute (EC)
  • Đã khởi tạo Elastic Load Balancer
  • Đã tạo Pool với Protocol Proxy

Trường hợp sử dụng

Proxy Protocol là gì?

Proxy Protocol là một chuẩn do HAProxy phát triển, giúp Load Balancer gửi thêm thông tin IP nguồn (client IP)port nguồn đến backend server theo một format đặc biệt. Backend server có thể đọc được thông tin này và sử dụng nó thay vì IP của Load Balancer.

Khi nào cần dùng Proxy Protocol?

  • Khi backend server cần biết IP gốc của client (vd: logging, security, rate-limiting).
  • Khi Load Balancer hoạt động ở Layer 4 (TCP mode) và không thể sử dụng HTTP headers như X-Forwarded-For.
  • Khi sử dụng TCP-based protocols như SMTP, FTP, hoặc MQTT, không thể chèn headers vào request.

CÁC BƯỚC THỰC HIỆN

  • Bước 1: Tạo Pool với Setting là Proxy Protocol và thực hiện thêm các Server backend vào pool:
  • Bước 2: Trường hợp giả sử các VM Backend chạy ứng dụng NginX server cho ứng dụng Web. Trên Nginx server, kiểm tra module proxy protocol http_realip_module đã được cài đặt trước hay chưa bằng command. Nếu chưa, bạn cần install hoặc rebuild nginx từ source với module trên.

nginx -V 2>&1 | grep -- 'http_realip_module'

 

  • Bước 3: Cấu hình trên ứng dụng NGINX

Trên các server backend, mở file cấu hình (/etc/nginx/nginx.conf hoặc /etc/nginx/sites-available/default) và sửa như sau:

http {
   # Bật Real IP module cho Proxy Protocol
http {
   # Chỉ định Load Balancer IP
   set_real_ip_from 192.168.1.10;  # Địa chỉ IP của Load Balancer
   real_ip_header proxy_protocol; #Chỉ định lấy IP thật từ Proxy Protocol.

   log_format custom_log '$proxy_protocol_addr - $remote_user [$time_local] '
                         '"$request" $status $body_bytes_sent '
                         '"$http_referer" "$http_user_agent"';

   access_log /var/log/nginx/access.log custom_log; #Dùng $proxy_protocol_addr để ghi lại IP thực vào log thay vì IP của Load Balancer.Ghi log truy cập vào /var/log/nginx/access.log với format đã tùy chỉnh.

   server {
       listen 80 proxy_protocol;
       listen [::]:80 proxy_protocol;
       
       server_name example.com;

       location / {
           proxy_set_header X-Real-IP $proxy_protocol_addr; #Thiết lập header X-Real-IP bằng IP thật của client.
           proxy_set_header X-Forwarded-For $proxy_protocol_addr;  # Thiết lập header X-Forwarded-For để backend server nhận được chuỗi IP đầy đủ từ client.
           proxy_pass http://backend_server; # 
       }
   }
}
 

Kiểm tra lại cấu hình và restart lại nginx: 

nginx -t

systemctl restart nginx

  • Bước 4: Thực hiện gửi request và kiểm tra log ra sẽ thấy IP client xuất hiện trong log file: 

curl -H "X-Forwarded-For: 1.2.3.4" http://example.com -v

Kiểm tra trong log Nginx
tail -f /var/log/nginx/access.log
 

    back to top

    logo

    © 2023, CMC Cloud. All rights reserved.

    Business Registration Certificate

    Giấy ĐKKD: 0102900049. Nơi cấp: Sở Kế hoạch & Đầu tư Thành phố Hà Nội

    Chịu trách nhiệm nội dung: Đặng Tùng Sơn