HA代理规则 - 找不到404

时间:2016-12-14 08:00:35

标签: load-balancing acl haproxy

我在HA Proxy中配置了以下规则。当我尝试点击http://haproxy_ip/service

时,我找不到404
frontend http-in
    bind 10.254.23.225:80
    acl has_service path_beg /service
    use_backend service_server if has_service

backend service_server
    balance roundrobin
    cookie SERVERID insert
    option httpchk HEAD /check.txt HTTP/1.0
    option httpclose
    option forwardfor
    server server1 192.168.2.1:9000 cookie server1 check

1 个答案:

答案 0 :(得分:0)

  

后端本身没有/服务。我使用haproxy在url中创建了虚拟路径。

使用当前配置,/service/test.txt会触发acl has_service并将/service/test.txt发送到您的后端,而不会更改网址。

如果您想更改网址(后端代理/service到后端的/),您应该在后端添加以下行:

reqrep ^([^\ ]*)\ /service(.*)  \1\ \2

这将从代理请求中删除/service

修改

HAProxy不会重写html输出:您的资源不会获得前导/service/,也无法正确投放。

当您代理请求时,更容易保持相同的路径:例如,将/代理到//myapp/代理到/myapp/。如果您将/a代理到/b/c,则代理本身需要重写回复:<img src="/a/test.png">需要更改为<img src="/b/c/test.png">。或worse<img src="../c/test.png" />。在html,js和css中添加相对引用。我不确定它对HAProxy是否可行。

如果您可以更改应用程序并将其部署在/service/上,则可以避免很多问题。使用其他虚拟主机(例如service.yourdomain.com)也可以解决此问题。

如果没有,我不确定HAProxy是否是正确的工具,我会尝试使用apache 2.4 mod_proxy_html(但在尝试非常难以在/service/上部署应用之前)。