Есть ли способ сделать маскировку URL в HAProxy? Я хотел бы иметь URL, направляющий на мой балансировщик нагрузки, т.е.www.example.com, перенаправить на другой URL, который у меня есть для другого приложения. Однако я хотел бы, чтобы браузер пользователя по-прежнему отображал исходный URL, (www.example.com). Как бы я это сделал?
решение1
Вероятно, вы можете сделать это с помощью reqrep
.
frontend FE
bind 10.10.10.10:80
mode http
acl is_domain.com hdr(host) -i domain.com
use_backend BE:domain.com if is_domain.com
backend BE:domain.com
mode http
reqrep ^([^\ ]*)\ (.*) \1\ /path/\2
server domain2.com:80
Хотя вам, вероятно, следует указать IP-адрес, domain2.com
на который происходит преобразование, в server
строке, чтобы не столкнуться со странным поведением.
решение2
Вместо того, чтобы делать маскировку URL, мы поняли, что можем сделать это проще, просто сделав перенаправление на бэкенде при отправке на бэкенд-сервер. Я не знаю, идеально ли это, но это достигло нашей цели на данный момент. Вот код:
фронтенд http_in
...
acl is_test1.domain.com hdr(host) -i test1.domain.com # Host & Domain only check.
acl is_path_null path / # No path check
use_backend domain.com.nopath if is_test1.domain.com is_path_null # If Host & Domain matches and path is null.
use_backend domain.com.path if is_test1.domain.com !is_path_null # If Host & Domain matches and path is not null.
фронтенд https_in
...
acl is_path_null path / # No path check
use_backend domain.com.nopath if { ssl_fc_sni -i test1.domain.com } is_path_null # If Host & Domain matches and path is null.
use_backend domain.com.path if { ssl_fc_sni -i test1.domain.com } !is_path_null # If Host & Domain matches and path is not null.
бэкэнд domain.com.nopath
...
server SERVER IP#:80 redir https://test1.domain.com/webapp check
бэкэнд domain.com.path
...
server SERVER IP#:80 check