使用HA Proxy 1.5我需要重写URL
http://main.domain.com/my-foo
至
http://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代理可以吗?我尝试了许多配置而没有成功。 谢谢!
答案 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总是会重写它。