Config protocol Proxy with member Nginx

Protocol Proxy là một protocol đặc thù cho phép Load Balanacer chuyển tiếp thông tin kết nối của end-user (client connection information) đến các Member servers. Từ đó các Member Servers sẽ có thông tin để cấu hình các tính năng nâng cao như Rate-limit by IP, GeoIP, thống kê log access của client,.... Để sử dụng Protocol Proxy, bạn cần tạo vLB Layer 4 với Pool Settings là Proxy Protocol, đồng thời Member Server của bạn phải hỗ trợ Protocol Proxy này. Một số Web Server phổ biến đã hỗ trợ Proxy Protocol là Nginx, Apache,... Bài hướng dẫn này sẽ dùng Nginx.

  • Bước 1: Bạn tạo Pool với Setting là Proxy Protocol:

  • Bước 2: 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'

* Chú ý: Module này sẽ được install sẵn từ version Ubuntu Bionic Beaver (18.04).

  • Bước 3: Cấu hình bật Proxy Protocol tại Virtual Host:

+ Cấu hình thêm tham số proxy_protocol tại server {} block:

+ Xác định Load Balancer IP nơi mình nhận traffic Proxy Protocol tại server {} block với cấu hình set_real_ip_from

set_real_ip_from <Load balancer IP>;

VD: ở đây IP của vLB đang là 103.245.248.204.

+ Cấu hình thay đổi IP của Load balancer với IP của client, được lấy từ Proxy Protocol Header tại server {} block với cấu hình real_ip_header và tham số proxy_protocol

real_ip_header proxy_protocol;

  • Bước 4: Cấu hình Header để lấy giá trị xuất log tại http {} block với cấu hình proxy_set_header

proxy_set_header X-Real-IP $proxy_protocol_addr; proxy_set_header X-Forwarded-For $proxy_protocol_addr;

  • Bước 5: Cấu hình Custom log với giá trị Client IP (Optional nếu bạn cần xuất log nginx kèm theo log client ip).

Định nghĩa log_format custom có kèm theo Client IP

Thêm trong block server{} access_log với log_format là custom trên.

  • Bước 6: Kiểm thử cấu hình và restart nginx để hoàn tất bằng command

nginx -t

Nếu không có errror, bạn tiến hành restart nginx.

systemctl restart nginx

  • Bước 7: 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:

Last updated