我是 haproxy 的新手,在配置它时遇到了一些困难。
我想要的是:
- 在浏览器中输入:proxy.company.com/Test/App
- 让 haproxy 在 webapp01.company.com/Test/App 和 webapp02.company.com/Test/App 之间平衡请求
- 保留基本 URL proxy.company.com/Test/App
我目前拥有的:我已经设置了两个网站:
- webapp01.company.com/Test/App
- 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
有可能吗?我该如何更改配置以允许我想要的操作?
答案1
反向代理将默认重写 Location 标头,因此无需这样做。
使用path_beg
而不是path_end
。
我认为您的配置太简单了。当您点击时会发生什么proxy.company.com
?您缺少一个default_backend
。
此外,代理的整个理念是您不必向世界公开 webapp01 和 02。无需向它们提供外部 IP,正如您的示例通过这些 DNS 条目所示。只需使用可从代理访问的内部 IP 即可。
尝试以下方法:
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