Я новичок в haproxy, и я немного пытаюсь его настроить.
Что я хочу:
Что у меня есть: у меня настроено два веб-сайта:
Оба работают, и когда я просматриваю каждый по отдельности, я получаю экран с именем сервера, который обслужил запрос (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