Как переписать URL-адрес с поддоменом в HAProxy

Когда пользователь запрашивает http://sub1.example.com/a/b/c , мне нужно заменить заголовок имени хоста этого запроса на example.com и перепишите путь на http://example.com/sub1/a/b/c . Я попытался использовать reqrep, но не смог найти, как добавить часть поддомена в путь.

reqirep ^Host:\ (.*[^\.])(\.example\.com)      Host:\ example.com
reqrep ^([^\ :]*)\ (.*) \1\ /???/\2

Я нашел метод% [req.hdr (host), lower, field (1, '.')] Для получения имени поддомена но я не могу использовать его в заменяемой части метода reqrep. Как я могу использовать переменную в этой части?

1
задан 17 November 2016 в 12:34
1 ответ

Захватить субдомен в переменную запроса с именем req.rewrite_example (это имя, которое я только что придумал ... требуется req. , остальное может быть любым) ... сделайте это, захватив значение заголовка Host: , преобразовав его в нижний регистр, а затем используя преобразователь regsub () для очистки в конце .example.com . Сделайте это, только если имя хоста заканчивается на .example.com - в противном случае переменная не определена и тесты -m found в последующих правилах будут ложными, и эти правила не сработают. (это то, что мы хотим, для любых других доменных имен, которые мы можем увидеть.)

http-request set-var(req.rewrite_example) req.hdr(host),lower,regsub(\.example\.com$,) if { hdr_end(host) -i .example.com }

Вставьте захваченную переменную в начало пути, если переменная определена (что должно быть, если первое правило было совпадением).

http-request set-path /%[var(req.rewrite_example)]%[path] if { var(req.rewrite_example) -m found }

Замените заголовок Host: буквальной строкой example.com , если переменная определена.

http-request set-header Host example.com if { var(req.rewrite_example) -m found }

... отправить запрос ...

curl http://www.example.com/tacgnol.jpg

.. .и следующие заголовки отправляются в серверную часть:

GET /www/tacgnol.jpg HTTP/1.1
User-Agent: curl/7.35.0
Accept: */*
Host: example.com

Готово.

5
ответ дан 3 December 2019 в 17:03

Теги

Похожие вопросы