pfsense haproxy redirect не соответствует URL - PullRequest
0 голосов
/ 16 октября 2019

Я использую haproxy в pfsense, и у меня есть некоторые правила и настройки acls, которые, кажется, работают.

Однако я получаю эту ошибку для поддоменов, которые не соответствуют моим правилам:

503 Service Unavailable
No server is available to handle this request.

Я пытаюсь исправить правило, которое будет перехватывать несопоставленные запросы и отправлять его в корень моего сайта или в указанное местоположение.

Я попытался установить бэкэнд по умолчанию, ноэто просто отображает сервер с неправильным URL / поддоменом.

Я пытался установить Host Regex, но это перенаправляет все без использования моих существующих правил.

Я испытываю:

domain1.com --> backend1
one.domain1.com --> backend1

domain2.com --> backend2
two.domain2.com --> backend2

three.domain.com --> "503 no server is available error" because no acl

Желаемый:

domain1.com --> backend1
one.domain1.com --> backend1

domain2.com --> backend2
two.domain2.com --> backend2

three.domain1.com --> redirect to domain1.com  <-- need to redirect
wrongsubdomain.domain2.com --> redirect to domain2.com  <-- need to redirect

Кто-нибудь знает, как получить это только за 503 с?

1 Ответ

2 голосов
/ 16 октября 2019

В frontend секциях, http-request redirect обрабатывается довольно рано в процессе, поэтому не может сделать что-то подобное (что, похоже, вы уже пытались, но безуспешно) ...

frontend web
    use_backend site1 if { hdr(host) -i site1.example.com }
    use_backend site2 if { hdr(host) -i site2.example.com }
    http-request redirect location https://site1.example.com 

HAProxy «разрешает» эту конфигурацию, но она не работает, потому что:

[WARNING] : parsing [/etc/haproxy/haproxy.cfg:xx] : a 'http-request' rule placed after a 'use_backend' rule will still be processed before.

use_backend правила всегда откладываются до тех пор, пока не обработаны правила http-request.

Однако HAProxy поддерживает http-request redirect и в бэкэнд-секциях, так что вы можете отложить интерпретацию http-request redirect, поместив ее в бэкэнд-секцию, которая существует исключительно для того, чтобы перехватить что-нибудь, не пойманное use_backend.

Создать «фиктивный» бэкэнд без серверов и правило перенаправления и установить этот новый бэкэнд в качестве бэкенда по умолчанию.

frontend web
    use_backend site1 if { hdr(host) -i site1.example.com }
    use_backend site2 if { hdr(host) -i site2.example.com }
    default_backend catchall

backend catchall
    mode http
    http-request redirect location https://site1.example.com 
    # no 'server' declared here

default_backend используется только при отсутствии use_backend Заявление было согласовано, после того как все они были рассмотрены. Его можно разместить в любом месте в конфигурации frontend, поскольку он автоматически оценивается последним, когда нет других возможностей.

catchall не имеет особого значения. Это просто произвольная метка для этого нового бэкэнда.

...