pfsense haproxy перенаправляет непревзойденный URL-адрес

Я использую 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-х?


person Kareem    schedule 16.10.2019    source источник
comment
Пожалуйста, рассмотрите возможность редактирования вопроса с помощью минималистичных, но поддающихся проверке примеров того, что вы пытаетесь сделать, но это не работает. например Если я добавлю http-request redirect ... if { ... }, то при перезагрузке я получу предупреждение, в котором говорится, что "правило перенаправления после правила use_backend все равно будет обработано раньше", и все мои сайты будут перенаправлены.   -  person Michael - sqlbot    schedule 16.10.2019
comment
Да, извини. Я действительно не совсем уверен, что я должен здесь делать, и я уже несколько дней читаю документы. Я немного застрял. Пользовательский интерфейс pfSense маскирует большую часть необработанной конфигурации, поэтому я переводил конфигурации в пользовательский интерфейс pfSense. Но это не столько проблема, проблема в том, что у меня есть несопоставленные запросы, выдающие 503. Я просто пытаюсь написать acl и/или действия, чтобы поймать это и отправить обратно в корневой домен.   -  person Kareem    schedule 16.10.2019


Ответы (1)


В разделах 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 не имеет особого значения. Это просто произвольная метка для этого нового бэкэнда.

person Michael - sqlbot    schedule 16.10.2019
comment
Вау, это имеет смысл, спасибо за объяснение. Я собираюсь попробовать это. - person Kareem; 17.10.2019
comment
У меня есть решение для работы, основанное на этом ответе, большое спасибо @michael-sqlbot - person Kareem; 20.10.2019