HAProxy 1.7 Перенаправление/перезапись определенных доменов с помощью файлов карт

HAProxy 1.7 Перенаправление/перезапись определенных доменов с помощью файлов карт

Я новичок в HAProxy и хотел бы перенаправить запросы в файлы карт, определенные доменами. Короткий пример: В моем файле redirect.map:

abc.com xyz.com
def.ru idk.com

Так что если пользователь отправляет запрос на домен abc.com или def.ru, он будет перенаправлен на определенный домен. Но если он запрашивает asd.com, перенаправление не должно быть выполнено. Моя цель — определить эти перенаправления в файле карты, чтобы их было легко изменить.

Далее я хотел бы сделать то же самое с переписыванием URI. Что-то вроде:

http-request set-uri X if Y from rewrite.map

Итак, мой файл карты будет выглядеть так:

 (my X variable)    (my Y variable)
/abc/def/specific  www.mydomain.com/specific

Есть ли у меня вообще возможность сделать это с помощью HAProxy?

решение1

http-request redirect location https://%[hdr(host),map(/etc/haproxy/rewrite.map)]%[capture.req.uri] code 301 if { hdr(host),map(/etc/haproxy/rewrite.map) -i -m found }

Thehdr(x)принестисчитывает заголовок запроса xи возвращает найденное значение. (Технически, он считывает последнее вхождение этого заголовка, но заголовок Hostдолжен появляться только один раз.)

Themapпреобразовательберет предшествующее ему значение (связанное с ,), ищет его в таблице карт и возвращает результат.

Если совпадений не найдено, результат не возвращается, поэтому -m foundтест не возвращает результата, и правило не совпало. ( -iделает поиск нечувствительным к регистру).

Если правило совпало, мы создаем новый URL для Locationзаголовка ответа, используя буквенную строку https://(измените ее на , httpесли это необходимо) + перезаписанное имя хоста из файла карты + исходный URI запроса, который начинается с лидирующей /и включает путь и строку запроса, сохраняя весь URI запроса.

Если вы не хотите сохранять исходный URI, а просто отправлять все на главную страницу целевого сайта, то удалите %[capture.req.uri]из выражения.

Связанный контент