Назад | Перейти на главную страницу

Haproxy ACL для баланса по запросу URL

Я использую Ubuntu с версией haproxy 1.4.13.

Его нагрузка балансирует два поддомена:

теперь я хочу иметь возможность использовать ACL для отправки на основе запрос URL в правые бэкэнды Например:

http://app1.domain.com/path/games/index.php  sould be send to backend1
http://app1.domain.com/path/photos/index.php should be send to backend2

http://app2.domain.com/path/mail/index.php  sould be send to backend3
http://app2.domain.com/path/wazap/index.php should be send to backend4

Я использовал код в следующем acl

frontend http-farm
        bind 0.0.0.0:80
        acl app1web     hdr_beg(host) -i app1  # for http://app1.domain.com
        acl app2web     hdr_beg(host) -i app2  # for http://app2.domain.com

acl msg-url-1 url_reg ^\/path/games/.*
acl msg-url-2 url_reg ^\/path/photos/.*
acl msg-url-3 url_reg ^\/path/mail/.*
acl msg-url-4 url_reg ^\/path/wazap/.*

use_backend games  if  msg-url-1 app1web
use_backend photos if  msg-url-2 app2web
use_backend mail if .....



backend games
        option httpchk GET /alive.php HTTP/1.1\r\nHost:\ app1.domain.com
        option  forwardfor
        balance roundrobin
        server  appsrv-1  192.168.1.10:80  check inter 2000 fall 3
        server  appsrv-2  192.168.1.11:80  check inter 2000 fall 3

backend photos
        option httpchk GET /alive.php HTTP/1.1\r\nHost:\ app2.domain.com
        option  forwardfor
        balance roundrobin
        server  appsrv-1  192.168.1.13:80  check inter 2000 fall 3
        server  appsrv-2  192.168.1.14:80  check inter 2000 fall 3

....

Поскольку путь mail, фотографии и т. Д. Будут пулами приложений на iis, я хочу отслеживать их, живы ли они, если пул не отвечает, он должен прекратить его обслуживание.

моя проблема наверняка в регулярном выражении в ACL acl msg-url-4 url_reg ^ / путь / wazap /.*

Что мне нужно изменить в ACL, чтобы он заработал?

спасибо за любые подсказки

Я не знаю, актуальна ли это, но вам не нужно избегать слэшей в регулярных выражениях HAProxy. Кроме того, в указанном вами случае вам даже не нужны регулярные выражения, но вы можете использовать простые сопоставители строк. Они на величину быстрее, чем регулярные выражения. Итак, ваши ACL могут выглядеть так:

acl msg-url-3 url_beg /path/mail/
acl msg-url-4 url_beg /path/wazap/

Если в отправленном бэкэнде нет доступного сервера, HAProxy вернет HTTP 503 ответ. Ты можешь использовать errorloc или errorfile чтобы настроить ответ.

Но может быть, я немного неправильно понял вашу проблему. Не очень понятно, что именно работает не так, как ожидалось.