У мене є така настройка:
|-------|--- backend1:8080
example.com:80---|HAProxy|--- backend2:8080
|-------|--- backend3:8080
Я хотів би налаштувати HAProxy, щоб додати спеціальний заголовок, що містить оригінальний URL. Наприклад, якщо користувач запитує http://example.com/foo?bar=baz
, тобто:
GET /foo?bar=baz HTTP/1.1
Host: example.com:80
Я хотів би, щоб HAProxy переклав цей запит у бекенд так:
GET /foo?bar=baz HTTP/1.1
Host: backend1:8080
x-custom-header: http://example.com/foo?bar=baz
reqadd
Варіант тільки дозволяє мені додати заголовок зі статичним значенням. Мені вдалося отримати частину шляху із запиту, використовуючи reqrep
:
reqrep ^([^\ ]*)\ ([^\ ]*)\ (HTTP\/1\.[10]) \0\r\nx-custom-header:\ \2
але, на жаль, це фіксує лише частину шляху вихідного URL-адреси, що призводить до наступного заголовка:
x-custom-header: /foo?bar=baz
Тому моє питання полягає в тому, чи можна в HAProxy 1.4 комбінувати як Host
заголовок, так і перший рядок HTTP-запиту в користувацький заголовок
reqadd
з acl, який посилається наbe_id
(backend-id)? Це не зовсім динамічно, але це може вас зблизити, якщо кількістьreqirep
зворотних рядів невелика ... також підтримує необов'язковий acl, тому ви, можливо, можете написати окремі регулярні вирази для кожного бек-енду, кожен активний, лише якщо acl відповідає вибраному бекенду, ід.