haproxy - 路由请求并保持相同的基本 URL

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

有可能吗?我该如何更改配置以允许我想要的操作?

答案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

相关内容