Когда пользователь запрашивает 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. Как я могу использовать переменную в этой части?
Захватить субдомен в переменную запроса с именем 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
Готово.