Я новичок в 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]
из выражения.