2016-12-14 117 views
0

我在HA代理中配置了以下规则。我得到当我试着打http://haproxy_ip/serviceHA代理规则 - 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

如果直接调用'http://192.168.2.1:9000/service',你有问题吗?如果是这样,你的后端不能正确处理你的请求。 –

+0

后端本身不具有/服务。我使用haproxy在url中拥有虚拟路径。 – Umapathy

+0

感谢它与reqrep ^([^ \] * \ /)service[/]?(.*)\ 1 \ 2 – Umapathy

回答

0

后端犯规本身有/服务404未找到。我使用haproxy在url中拥有虚拟路径。

当前的配置,/service/test.txt会触发ACL has_service并将派/service/test.txt到后端,在不改变网址。

如果你想(在前端代理/service/在后端)更改URL,你应该加入下面一行在你的后台:

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

这将从代理请求删除/service

编辑:

HAProxy的将不写HTML输出:你的资产将无法获得领先/service/,将无法正确送达。

代理请求时,保留相同路径比较容易:代理///myapp//myapp/例如。如果代理/a/b/c,代理本身将需要重写响应:<img src="https://stackoverflow.com/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/部署应用之前)。

+0

)合作您是对的!但是,Web应用程序具有不会被重定向到后端规则的css,images和js文件。因为/服务在第一次重定向后不会出现。如何保持ip并在同一会话中使用它进行重定向? – Umapathy

+0

查看我的更新:处理后端中的'/ services /'(如果可能)将是最简单的解决方案。 –