Cách thêm tiêu đề tùy chỉnh chứa địa chỉ tuyệt đối của tài nguyên được yêu cầu ban đầu


11

Tôi có các thiết lập sau:

                 |-------|--- backend1:8080
example.com:80---|HAProxy|--- backend2:8080
                 |-------|--- backend3:8080

Tôi muốn định cấu hình HAProxy để thêm tiêu đề tùy chỉnh chứa url gốc. Ví dụ: nếu người dùng yêu cầu http://example.com/foo?bar=baz, tức là:

GET /foo?bar=baz HTTP/1.1
Host: example.com:80

Tôi muốn HAProxy dịch yêu cầu này sang phần phụ trợ như sau:

GET /foo?bar=baz HTTP/1.1
Host: backend1:8080
x-custom-header: http://example.com/foo?bar=baz

Các reqaddlựa chọn duy nhất cho phép tôi để thêm một tiêu đề với một giá trị tĩnh. Tôi đã có thể nhận được phần đường dẫn từ yêu cầu bằng cách sử dụng reqrep:

reqrep ^([^\ ]*)\ ([^\ ]*)\ (HTTP\/1\.[10])  \0\r\nx-custom-header:\ \2

nhưng thật không may, điều này chỉ chiếm phần đường dẫn của url gốc dẫn đến tiêu đề sau:

x-custom-header: /foo?bar=baz

Vì vậy, câu hỏi của tôi là liệu HAProxy 1.4 có thể kết hợp cả Hosttiêu đề và dòng đầu tiên của yêu cầu HTTP thành tiêu đề tùy chỉnh không


Bạn đã thử kết hợp reqaddvới một acl tham chiếu be_id(backend-id) chưa? Nó không chính xác năng động nhưng nó có thể giúp bạn tiến gần hơn nếu số lượng phụ trợ nhỏ ... reqirepcũng hỗ trợ một acl tùy chọn, do đó bạn có thể viết các biểu thức riêng biệt cho mỗi back-end, mỗi hoạt động chỉ khi một acl phù hợp với phụ trợ đã chọn- Tôi.
Michael - sqlbot

Câu trả lời:


18

Câu trả lời ngắn: không, bạn không thể làm điều này trong HAProxy 1.4 .


Tuy nhiên, đối với những người tìm thấy câu hỏi này trên 1.5+:

Trong HAProxy 1.5+, bạn có thể tham chiếu các biến thông qua %[variable]cú pháp và bạn không bị hạn chế chỉ sử dụng các chuỗi tĩnh. Bạn có thể xem biến nào đã tồn tại trong phần 7.3 của hướng dẫn cấu hình HAProxy (cụ thể là 7.3.6 cho biến 7 lớp ).

Đối với trường hợp của bạn, bạn đang xem thô url, như thế này:

http-request set-header X-Custom-Header %[url]

1
Cảm ơn vì đã xác nhận kết luận của tôi rằng điều này là không thể trong 1.4. Tôi đã chuyển sang nginx.
Darin Dimitrov

% [url] không phải lúc nào cũng là URL đầy đủ, nhưng dường như đó là haproxy tốt nhất có thể làm. haproxy 1,8 URL docs biến: cbonte.github.io/haproxy-dconv/1.8/configuration.html#7.3.6-url
zie
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.