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

haproxy - направить запрос и сохранить тот же базовый URL

Я новичок в haproxy, и я немного пытаюсь его настроить.

Что я хочу:

  1. Введите в браузере: proxy.company.com/Test/App
  2. Пусть haproxy сбалансирует запрос между webapp01.company.com/Test/App и webapp02.company.com/Test/App
  3. Сохраните базовый URL proxy.company.com/Test/App

Что у меня есть: у меня настроено два веб-сайта:

  1. webapp01.company.com/Test/App
  2. webapp02.company.com/Test/App

Оба работают, и когда я просматриваю каждый по отдельности, я получаю экран с именем сервера, который обслужил запрос (WebApp01 или WebApp02).

Однако когда я перехожу на proxy.company.com/Test/App, я получаю ошибку 404. Я ожидаю, что запрос будет перенаправлен на webapp01 или webapp02, и я ожидаю увидеть имя сервера, обслуживающего запрос.

Вот моя текущая конфигурация:

global
        log /dev/log    local0
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        user haproxy
        group haproxy
        daemon

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        contimeout 5000
        clitimeout 50000
        srvtimeout 50000
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http

frontend proxy.company.com
   bind :80
acl test_app path_end -i /Test/App

use_backend srvs_test    if test_app

backend srvs_test
   balance roundrobin
   server webapp01 webapp01.company.com:80 check
   server webapp02 webapp02.company.com:80 check

Если я изменю конфигурацию бэкэнда на это:

backend srvs_test
   balance roundrobin
   redirect location http://webapp01.company.com/Test/App

Однако он работает, если я набираю proxy.company.com/Test/App, меня перенаправляют на webapp01.company.com/Test/App. Базовый URL-адрес изменен, и я хочу, чтобы он оставался proxy.company.com/Test/App

Является ли это возможным? Как я могу изменить конфигурацию, чтобы разрешить то, что я хочу?

Обратный прокси-сервер по умолчанию перезаписывает заголовок Location, поэтому в этом нет необходимости.

Использовать path_beg вместо того path_end.

Думаю, ваш конфиг слишком минимален. Что происходит, когда вы попадаете proxy.company.com? Вам не хватает default_backend.

Кроме того, вся идея прокси заключается в том, что вам не нужно открывать миру webapp01 и 02. Нет необходимости давать им внешние IP-адреса, как показывает ваш пример с этими записями DNS. Просто используйте внутренние, доступные с вашего прокси.

Попробуйте что-нибудь вроде:

frontend proxy.company.com *:80
  acl test_app path_beg -i /Test/App
  use_backend srvs_test if test_app
  default_backend default

backend srvs_test
   balance roundrobin
   server webapp01 webapp01.company.com:80 check
   server webapp02 webapp02.company.com:80 check

backend default
   server localhost:80 check