使用重定向配置重写HAProxy和reqrep路径

时间:2015-10-15 13:32:13

标签: regex redirect url-rewriting haproxy httpbackend

使用HA Proxy 1.5我需要重写URL http://main.domain.com/my-foohttp://othersite.com:8081/other-bar

以下是我的尝试:

frontend ft_def
  bind :80                                      
  mode http                                                  
  acl has_special_uri path_beg /my-foo
  use_backend def if has_special_uri
  default_backend def

backend def
  mode http                                       
  option forwardfor                       
  reqirep ^([^\ ]*\ )/my-foo(.*)    \1/other-bar\2
  server myserver othersite.com:8081

这有效: URL
http://main.domain.com/my-foo/home.html
成为
http://othersite.com:8081/other-bar/home.html

并在浏览器中显示初始网址http://main.domain.com/my-foo/home.html

这正是我所需要的:它对用户来说是完全透明的。 但重定向不起作用:当我点击页面上的链接时,URL就是
http://main.domain.com/other-bar/page2.html

我希望http://main.domain.com/my-foo/page2.html显示在浏览器中。

HA代理可以吗?我尝试了许多配置而没有成功。 谢谢!

2 个答案:

答案 0 :(得分:2)

如果您正在谈论HTML中的链接(而不是重定向的Location:标题)...... HAProxy 1.5无法修改这些链接。

据推测,根据您的描述,页面/other-bar/page1.html会在内部链接到<a href="/other-bar/page2.html">,当它真正链接到<a href="page2.html">时。您需要相对链接才能使此类内容透明地工作...否则,组件&#34; X&#34;在您的链中必须能够在响应主体中动态修改链接,但当然只有链接,因为您不希望盲目地正则表达式替换整个页面内容......和HAProxy 1.5没有做出反应机构,所以它不能完成组件&#34; X的作用。&#34;

HAProxy 1.6 可能能够与Lua一起做到这一点,但这可能......并且如果可以做到这一点,那么它不可能处于你通常期望从HAProxy获得的性能水平,因为在Lua中擦除html可能是一个相对昂贵的主张。

答案 1 :(得分:0)

通常,任何网址更改都应由网络应用本身处理,例如Phoenix框架https://hexdocs.pm/phoenix/Phoenix.Endpoint.html:path的{​​{1}}配置下有一个:url选项,它是专门为此目的而设计的。然后浏览器仍然会请求URL出现在HTML文件中,但是HAProxy总是会重写它。

相关问题