Як додати спеціальний заголовок, що містить абсолютну адресу первинно запитуваного ресурсу


11

У мене є така настройка:

                 |-------|--- 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 відповідає вибраному бекенду, ід.
Майкл - sqlbot

Відповіді:


18

Коротка відповідь: ні, цього не можна зробити в HAProxy 1.4 .


Однак для тих, хто знайшов це питання на версії 1.5+:

У HAProxy 1.5+ ви можете посилатися на змінні через %[variable]синтаксис, і ви не обмежуєтесь лише використанням статичних рядків. Ви можете бачити, які змінні вже існують у розділі 7.3 керівництва по конфігурації HAProxy (конкретно 7.3.6 для змінних шару 7 ).

Для вашого випадку ви дивитесь на сировину url, як це:

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

1
Дякую за підтвердження мого висновку, що це неможливо в 1.4. Я перейшов на nginx.
Дарин Димитров

% [url] не завжди є повною URL-адресою, але, здається, це найкращий хапрокси. haproxy 1.8 Документи зі змінною URL-адресою: cbonte.github.io/haproxy-dconv/1.8/configuration.html#7.3.6-url
zie
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.