Proxy Protocol là gì? Cách giữ lại IP gốc qua proxy
Proxy Protocol là gì là câu hỏi quen thuộc với anh em quản trị máy chủ khi đặt website hay dịch vụ phía sau load balancer rồi phát hiện nhật ký chỉ toàn ghi IP của load balancer. Proxy Protocol là cơ chế truyền địa chỉ IP và cổng gốc của client qua proxy hoặc bộ cân bằng tải tới máy chủ đích. Bài viết dành cho anh em quản trị server, DevOps và người đang tìm hiểu hạ tầng proxy. Cùng ProxyVN làm rõ cách hoạt động, cách cấu hình với HAProxy và NGINX, điểm khác với dịch vụ đổi IP và những lưu ý bảo mật khi triển khai.
Proxy Protocol là gì và dùng để làm gì
Proxy Protocol là giao thức do đội ngũ HAProxy phát triển để chuyển thông tin kết nối gốc qua NAT, TCP proxy hoặc bộ cân bằng tải. Thông tin được truyền gồm địa chỉ IP và cổng của cả hai đầu kết nối: phía client và phía máy chủ mà client kết nối tới.

Giao thức Proxy
Vấn đề mà Proxy Protocol giải quyết
Khi load balancer nhận kết nối từ người dùng rồi mở một kết nối mới tới backend, máy chủ backend chỉ nhìn thấy IP của load balancer. Mọi người dùng trên thế giới đều xuất hiện như cùng một địa chỉ. Hệ quả là nhật ký truy cập mất giá trị, giới hạn tần suất áp dụng sai, danh sách chặn IP không còn tác dụng và việc điều tra sự cố bảo mật trở nên rất khó.
Với giao thức HTTP, vấn đề này thường được giải quyết bằng header X-Forwarded-For. Nhưng với dịch vụ không dùng HTTP như máy chủ thư, cơ sở dữ liệu, máy chủ trò chơi hay kết nối TLS được chuyển nguyên vẹn, không có chỗ nào để chèn header. Proxy Protocol ra đời để lấp khoảng trống đó.
Cách tiếp cận của giao thức
Proxy Protocol đặt một đoạn dữ liệu ngắn ở ngay đầu kết nối, trước mọi dữ liệu của ứng dụng. Backend đọc đoạn này để khôi phục thông tin client, rồi xử lý phần dữ liệu còn lại như bình thường. Đặc tả của HAProxy cho biết cơ chế có thể truyền thông tin qua nhiều lớp NAT hoặc TCP proxy liên tiếp, miễn là mỗi lớp đều hỗ trợ.
Điểm cần nhớ: Proxy Protocol là giao thức bảo toàn thông tin IP cho phía máy chủ, không phải dịch vụ giúp người dùng đổi IP hay tăng mức ẩn danh.
Cách Proxy Protocol chuyển IP gốc tới backend
Mô hình cơ bản gồm ba thành phần: client, load balancer và backend. Khả năng nhận diện client phụ thuộc vào cấu hình giữa load balancer và backend.

Cách giao thức proxy chuyển IP gốc đến backend
Khi chưa bật giao thức
Load balancer nhận kết nối của người dùng, sau đó mở một kết nối riêng tới backend. Máy chủ ứng dụng ghi nhận IP nguồn là IP của load balancer. Điều này dễ tạo ra các vấn đề:
- Hàng nghìn người truy cập xuất hiện dưới cùng một IP trong nhật ký.
- Giới hạn tần suất theo IP có thể chặn nhầm toàn bộ người dùng.
- Danh sách chặn IP độc hại không còn tác dụng ở tầng backend.
- Thống kê theo vị trí địa lý của người dùng bị sai lệch nghiêm trọng.
Khi giao thức được bật
Load balancer đặt thông tin gốc ở đầu kết nối tới backend. Một dòng phiên bản 1 trông như minh họa dưới đây:
PROXY TCP4 203.113.45.67 192.168.0.1 12345 80
Trong đó, 203.113.45.67 là IP nguồn của client, 192.168.0.1 là IP đích mà client đã kết nối tới, 12345 là cổng nguồn và 80 là cổng đích. Lưu ý rằng IP thứ hai là địa chỉ đích ban đầu, không mặc định là IP của proxy.
Dòng trên không phải HTTP header mà là phần mở đầu của luồng kết nối. Tài liệu NGINX ghi nhận khả năng sử dụng Proxy Protocol với HTTP, SSL, WebSocket và TCP.
Hai phiên bản phổ biến
- Phiên bản 1: định dạng văn bản, dễ đọc và dễ kiểm tra thủ công khi gỡ lỗi.
- Phiên bản 2: định dạng nhị phân, gọn hơn, xử lý nhanh hơn và hỗ trợ thêm thông tin mở rộng qua các trường TLV, ví dụ thông tin về kết nối TLS hay định danh của dịch vụ đám mây.
HAProxy chấp nhận cả hai định dạng khi bật accept-proxy. Tuy nhiên, phía gửi và phía nhận vẫn phải thống nhất cách giao tiếp, nếu không kết nối sẽ thất bại.
Cấu trúc chi tiết của phần mở đầu Proxy Protocol
Hiểu cấu trúc phần mở đầu giúp anh em đọc được dữ liệu khi gỡ lỗi bằng công cụ bắt gói tin, và hiểu vì sao hai đầu phải thống nhất phiên bản.
Phiên bản 1 dạng văn bản
Phần mở đầu phiên bản 1 là một dòng văn bản duy nhất, kết thúc bằng ký tự xuống dòng. Dòng bắt đầu bằng chữ PROXY, tiếp theo là loại giao thức như TCP4 cho IPv4 hoặc TCP6 cho IPv6, sau đó lần lượt là IP nguồn, IP đích, cổng nguồn và cổng đích, ngăn cách bằng dấu cách. Độ dài tối đa của dòng được giới hạn để phía nhận dễ xử lý.
Ngoài ra còn có dạng PROXY UNKNOWN, dùng khi phía gửi không biết hoặc không muốn chia sẻ thông tin kết nối, ví dụ với các kết nối kiểm tra sức khỏe dịch vụ. Backend nhận dạng này sẽ dùng IP thật của kết nối thay vì IP trong phần mở đầu.
Phiên bản 2 dạng nhị phân
Phiên bản 2 bắt đầu bằng một chuỗi chữ ký cố định mười hai byte, giúp phía nhận nhận ra ngay đây là phần mở đầu Proxy Protocol chứ không phải dữ liệu ứng dụng. Tiếp theo là các byte cho biết phiên bản, loại lệnh, họ địa chỉ và độ dài phần còn lại. Sau đó là địa chỉ và cổng ở dạng nhị phân, cuối cùng là các trường mở rộng TLV tùy chọn.
Các trường TLV cho phép truyền thêm thông tin như tên máy chủ mà client yêu cầu trong TLS, giao thức ứng dụng được thương lượng, hay mã định danh kết nối của dịch vụ đám mây. Đây là lý do phiên bản 2 được ưu tiên trong hạ tầng hiện đại.
Vì sao không thể trộn hai phiên bản
Phía nhận chỉ cấu hình cho phiên bản 1 sẽ không hiểu chuỗi chữ ký nhị phân của phiên bản 2 và ngược lại, trừ khi phần mềm hỗ trợ tự nhận diện. HAProxy tự nhận diện được cả hai, nhưng nhiều phần mềm khác chỉ hỗ trợ một. Khi gặp lỗi kết nối sau khi bật Proxy Protocol, kiểm tra phiên bản là việc đầu tiên nên làm.
Cấu hình Proxy Protocol với HAProxy và NGINX
Phần này đưa ra ví dụ cấu hình minh họa cho hai phần mềm phổ biến nhất. Anh em cần điều chỉnh theo phiên bản và kiến trúc thực tế.

Cấu hình Proxy Protocol giữa load balancer và backend
HAProxy gửi Proxy Protocol tới backend
Trong HAProxy, thêm tham số send-proxy hoặc send-proxy-v2 vào dòng khai báo máy chủ backend:
backend web_servers
mode tcp
server web1 10.0.0.11:443 check send-proxy-v2
server web2 10.0.0.12:443 check send-proxy-v2
Với cấu hình này, mỗi kết nối HAProxy mở tới web1 và web2 đều bắt đầu bằng phần mở đầu Proxy Protocol phiên bản 2. Nếu anh em mới làm quen với HAProxy, bài HAProxy là gì giới thiệu tổng quan về phần mềm này.
NGINX nhận Proxy Protocol
Ở phía backend dùng NGINX, cần khai báo tham số proxy_protocol trên dòng listen và cấu hình module real_ip để thay IP nguồn bằng IP trong phần mở đầu:
server {
listen 443 ssl proxy_protocol;
set_real_ip_from 10.0.0.5;
real_ip_header proxy_protocol;
}
Dòng set_real_ip_from chỉ định địa chỉ của load balancer được tin cậy. Chỉ những kết nối đến từ địa chỉ này mới được dùng IP trong phần mở đầu. Bài cách cấu hình NGINX làm reverse proxy hướng dẫn chi tiết các cấu hình NGINX liên quan.
Kiểm tra sau khi cấu hình
Sau khi tải lại cấu hình, truy cập dịch vụ từ một máy bên ngoài và kiểm tra nhật ký truy cập của backend. Nếu nhật ký ghi đúng IP của máy bên ngoài thay vì IP load balancer, cấu hình đã hoạt động. Nếu backend từ chối kết nối, kiểm tra lại hai đầu có cùng bật hoặc cùng tắt Proxy Protocol hay không.
Proxy Protocol trên các nền tảng đám mây
Nhiều dịch vụ cân bằng tải và CDN trên đám mây hỗ trợ Proxy Protocol, nhưng thường không bật mặc định.
Load balancer của AWS
Tài liệu AWS cho biết Network Load Balancer hỗ trợ Proxy Protocol phiên bản 2 nhưng mặc định tắt. Quản trị viên cần bật trong cấu hình nhóm đích và chuẩn bị backend tương thích trước khi bật, nếu không mọi kết nối sẽ lỗi ngay lập tức.
Cloudflare Spectrum
Cloudflare Spectrum hỗ trợ chuyển IP client tới máy chủ gốc qua Proxy Protocol cho các ứng dụng TCP và UDP. Điều này không có nghĩa mọi dịch vụ của Cloudflare đều dùng cơ chế này. Với website thông thường qua proxy HTTP của Cloudflare, IP gốc được truyền qua header riêng; bài Cloudflare reverse proxy giải thích chi tiết.
Kubernetes và ingress controller
Trong Kubernetes, ingress controller dựa trên NGINX hay HAProxy đều có tùy chọn nhận Proxy Protocol từ load balancer của nhà cung cấp đám mây. Đây là cấu hình phổ biến để ứng dụng bên trong cụm ghi nhận đúng IP người dùng.
Điểm khác giữa Proxy Protocol và dịch vụ proxy
Tên gọi giống nhau dễ gây nhầm lẫn, nhưng mục đích rất khác nhau. Proxy Protocol giữ thông tin client cho backend, còn dịch vụ proxy hướng ra Internet thay đổi IP mà website đích nhìn thấy.
Tiêu chí |
Proxy Protocol |
Dịch vụ proxy đổi IP |
|---|---|---|
Mục đích |
Giữ IP gốc cho máy chủ |
Thay IP người dùng khi ra Internet |
Người cấu hình |
Quản trị máy chủ |
Người dùng hoặc ứng dụng |
Vị trí |
Giữa load balancer và backend |
Giữa người dùng và Internet |
Tác động tới IP |
Không đổi IP, chỉ truyền thông tin |
Đổi IP mà website nhìn thấy |
Đối tượng sử dụng |
DevOps, quản trị mạng |
Marketing, SEO, quản lý tài khoản |
So với proxy 4G, datacenter và dân cư
Proxy 4G cấp IP mạng di động để chuyển lưu lượng ra Internet. Proxy datacenter dùng IP trung tâm dữ liệu, phù hợp nhiều tác vụ tự động. Proxy dân cư dùng IP gắn với nhà mạng phục vụ hộ gia đình. Cả ba đều là dịch vụ đổi IP đầu ra, thuộc nhóm forward proxy; bài forward proxy là gì giải thích cơ chế chung. Proxy Protocol không cấp IP mới cho ai, mà chỉ chuyển thông tin client về backend.
So với X-Forwarded-For
X-Forwarded-For chuyển IP trong yêu cầu HTTP, nên chỉ dùng được với lưu lượng HTTP mà proxy đọc được. Proxy Protocol hoạt động ở cấp kết nối, phù hợp cả với dịch vụ TCP không dùng HTTP và với kết nối HTTPS được chuyển nguyên vẹn mà load balancer không giải mã.
Ứng dụng thực tế của Proxy Protocol
Giao thức hữu ích ở mọi nơi thiết bị trung gian khiến backend mất IP nguồn. Ba ứng dụng dưới đây thể hiện rõ giá trị này.

Ứng dụng của giao thức proxy
Cân bằng tải và ghi nhật ký
HAProxy hoặc NGINX chuyển thông tin nguồn để máy chủ ghi đúng IP client, hỗ trợ đối chiếu nhật ký và điều tra lỗi. Khi khách hàng báo không truy cập được, đội vận hành có thể tìm đúng kết nối của khách trong nhật ký thay vì mò trong hàng nghìn dòng cùng một IP.
Kiểm soát truy cập
Khi nhận đúng IP nguồn, hệ thống áp dụng giới hạn tần suất và danh sách chặn chính xác hơn. Nếu mọi kết nối cùng hiện dưới IP load balancer, chặn một IP đồng nghĩa với chặn toàn bộ người dùng.
Hạ tầng nhiều lớp
Trong chuỗi gồm proxy biên, tường lửa, load balancer và backend, IP nguồn rất dễ biến mất ở một lớp nào đó. Proxy Protocol giúp chuyển thông tin qua các lớp có hỗ trợ. Kiến trúc này thường gặp trong hệ thống dùng reverse proxy nhiều tầng; bài reverse proxy là gì mô tả các mô hình phổ biến.
Proxy Protocol trong các phần mềm phổ biến khác
Ngoài HAProxy và NGINX, nhiều phần mềm máy chủ khác cũng hỗ trợ nhận Proxy Protocol. Danh sách dưới đây giúp anh em biết nơi cần tìm tùy chọn cấu hình.
Máy chủ web Apache
Apache hỗ trợ nhận Proxy Protocol thông qua module mod_remoteip với chỉ thị RemoteIPProxyProtocol. Khi bật, Apache thay IP nguồn bằng IP trong phần mở đầu để nhật ký và các module kiểm soát truy cập dùng đúng IP client.
Máy chủ thư
Các máy chủ thư phổ biến như Postfix và Dovecot đều có tùy chọn nhận Proxy Protocol. Đây là ứng dụng điển hình vì giao thức thư không có chỗ chèn header kiểu HTTP, trong khi việc chống thư rác lại phụ thuộc rất nhiều vào IP nguồn chính xác.
Proxy và ingress hiện đại
Traefik, Envoy và các ingress controller trong Kubernetes đều hỗ trợ cả gửi lẫn nhận Proxy Protocol. Trong kiến trúc dịch vụ vi mô, chúng thường đứng giữa load balancer của nhà cung cấp đám mây và các dịch vụ bên trong.
Điều cần kiểm tra với mọi phần mềm
Dù dùng phần mềm nào, hãy kiểm tra ba điểm: phần mềm hỗ trợ phiên bản nào, có cho phép giới hạn nguồn tin cậy không, và có chế độ chấp nhận cả kết nối có lẫn không có phần mở đầu để chuyển đổi êm hay không.
Tình huống thực tế: chuyển website sang load balancer
Một website bán hàng chạy trên một máy chủ duy nhất quyết định chuyển sang mô hình hai máy chủ phía sau load balancer TCP để tăng khả năng chịu tải. Load balancer được cấu hình chuyển TLS nguyên vẹn, chứng chỉ vẫn nằm trên hai máy chủ backend.
Ngay sau khi chuyển, đội vận hành nhận thấy ba vấn đề. Công cụ chống đăng nhập sai nhiều lần khóa luôn mọi người dùng, vì tất cả đều xuất hiện dưới IP load balancer. Báo cáo khách hàng theo tỉnh thành chỉ còn một địa điểm. Bộ lọc chặn IP độc hại không còn tác dụng.
Vì load balancer không giải mã TLS, header X-Forwarded-For không thể dùng được. Giải pháp là bật Proxy Protocol phiên bản 2 trên load balancer và cấu hình NGINX trên hai máy chủ nhận phần mở đầu, chỉ tin tưởng IP của load balancer. Đội làm theo thứ tự: cấu hình backend trước, kiểm tra trên một máy, rồi bật phía load balancer cho máy đó, sau cùng mới áp dụng cho máy thứ hai. Toàn bộ quá trình không gây gián đoạn cho khách hàng, và cả ba vấn đề được giải quyết.
Rủi ro bảo mật khi triển khai Proxy Protocol
Proxy Protocol không có cơ chế xác thực. Backend tin vào bất cứ thông tin nào nằm ở đầu kết nối. Đây là điểm cần đặc biệt lưu ý.
Nguy cơ giả mạo IP
Nếu backend chấp nhận phần mở đầu Proxy Protocol từ bất kỳ nguồn nào, kẻ tấn công có thể kết nối trực tiếp tới backend và tự gửi một dòng PROXY với IP tùy ý. Backend sẽ ghi nhận IP giả, cho phép kẻ tấn công vượt qua danh sách chặn hoặc giả làm IP được phép.
Biện pháp phòng ngừa
- Chỉ chấp nhận Proxy Protocol từ địa chỉ IP của load balancer tin cậy.
- Dùng tường lửa chặn mọi kết nối tới backend không đến từ load balancer.
- Không mở cổng nhận Proxy Protocol ra Internet công khai.
- Giữ cấu hình hai đầu đồng bộ, ghi rõ trong tài liệu vận hành.
Ngoài ra, Proxy Protocol không mã hóa hay xác thực dữ liệu. Anh em vẫn cần TLS để bảo vệ đường truyền. Trong mạng nội bộ giữa load balancer và backend, nên đặt các máy chủ trong một mạng riêng tách khỏi Internet, để kẻ tấn công không thể kết nối trực tiếp tới backend ngay cả khi tường lửa trên máy chủ bị cấu hình sai.
Kinh nghiệm triển khai Proxy Protocol an toàn
Lỗi thường gặp nhất là sự thiếu đồng bộ giữa hai đầu. Backend bật chế độ nhận nhưng load balancer chưa gửi phần mở đầu: máy chủ chờ đúng định dạng nên từ chối kết nối. Ngược lại, load balancer gửi dòng PROXY nhưng backend không biết, coi đó là dữ liệu ứng dụng và báo lỗi cú pháp.
Trước khi đưa vào môi trường chính, anh em nên kiểm tra:
- Xác nhận thiết bị gửi và backend hỗ trợ cùng phiên bản giao thức.
- Chỉ nhận dữ liệu từ IP proxy hoặc load balancer tin cậy.
- Thử trên một backend nhỏ trước khi áp dụng cho toàn bộ.
- Kiểm tra nhật ký đã ghi đúng IP nguồn và cổng.
- Theo dõi tỷ lệ kết nối lỗi sau khi đổi cấu hình.
- Chuẩn bị phương án quay lại nếu ứng dụng chưa tương thích.
Thứ tự bật cũng quan trọng. Với hệ thống đang chạy, nên cấu hình backend chấp nhận cả kết nối có và không có Proxy Protocol nếu phần mềm hỗ trợ, rồi mới bật phía gửi, cuối cùng tắt chế độ chấp nhận kết nối không có phần mở đầu.
Một tình huống điển hình: website vẫn mở được nhưng nhật ký vẫn ghi IP load balancer. Nguyên nhân thường là đã bật proxy_protocol trên dòng listen nhưng quên cấu hình real_ip, nên NGINX đọc được thông tin nhưng không dùng để thay IP nguồn.
Đối tượng nên tìm hiểu Proxy Protocol
Nhóm sử dụng chính gồm kỹ sư DevOps, quản trị mạng, đội bảo mật và đơn vị vận hành load balancer. Người làm marketing, SEO hay quản lý nhiều tài khoản thường cần đổi IP đầu ra; khi đó, proxy 4G, datacenter hoặc dân cư mới là lựa chọn phù hợp.
Anh em cần IP đi ra ổn định phía trước hệ thống có thể mua proxy dân cư tĩnh hoặc datacenter tại ProxyVN, hỗ trợ cả HTTP và SOCKS5.
Xem thêm: Proxy Caching là gì? Giải đáp chi tiết kiến thức mạng
Câu hỏi thường gặp về Proxy Protocol
Proxy Protocol có làm chậm kết nối không?
Gần như không. Phần mở đầu chỉ vài chục byte và chỉ gửi một lần ở đầu mỗi kết nối, không lặp lại cho từng yêu cầu bên trong kết nối đó. Phiên bản 2 dạng nhị phân còn xử lý nhanh hơn phiên bản 1.
Có cần Proxy Protocol nếu đã dùng X-Forwarded-For?
Nếu toàn bộ lưu lượng là HTTP và load balancer giải mã TLS, X-Forwarded-For thường đủ dùng. Proxy Protocol cần thiết khi load balancer chuyển TLS nguyên vẹn hoặc khi dịch vụ không dùng HTTP.
Làm sao kiểm tra load balancer có đang gửi Proxy Protocol?
Cách trực tiếp nhất là bắt gói tin trên backend và xem vài byte đầu của mỗi kết nối. Với phiên bản 1, anh em sẽ thấy dòng chữ PROXY ở đầu. Với phiên bản 2, sẽ thấy chuỗi chữ ký nhị phân cố định. Cách đơn giản hơn là tạm cấu hình backend ghi nhật ký IP nguồn và so sánh với IP của máy dùng để thử nghiệm.
Proxy Protocol có dùng được với UDP không?
Phiên bản 2 có định nghĩa họ địa chỉ cho UDP, nhưng mức hỗ trợ trong phần mềm thực tế hạn chế hơn nhiều so với TCP. Một số dịch vụ đám mây có cơ chế riêng để truyền IP gốc cho lưu lượng UDP, nên cần đọc tài liệu của từng nhà cung cấp.
Trình duyệt có gửi Proxy Protocol không?
Không. Proxy Protocol chỉ được gửi giữa các thành phần hạ tầng như load balancer và backend, người dùng cuối không liên quan và cũng không cần cấu hình gì trên trình duyệt hay thiết bị của mình.
Vậy Proxy Protocol là gì? Đó không phải công cụ đổi IP, mà là cách giúp backend nhận diện đúng client khi đứng sau load balancer. Hiểu đúng bản chất giúp ghi nhật ký chính xác, kiểm soát truy cập hiệu quả và tránh nhầm với dịch vụ proxy. Khi cần tư vấn về proxy đổi IP ổn định, hãy liên hệ Proxy.vn - Nhà cung cấp dịch vụ proxy chất lượng hàng đầu Việt Nam.