Назад | Перейти на главную страницу

Как добавить собственный заголовок, содержащий абсолютный адрес первоначально запрошенного ресурса

У меня следующая установка:

                 |-------|--- 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-запроса в настраиваемый заголовок

Короткий ответ: нет, вы не можете сделать это в 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]