【问题标题】:HAProxy redirect to subdomainHAProxy 重定向到子域
【发布时间】:2017-02-13 20:01:21
【问题描述】:

我正在尝试重定向这些:

对这些:

但是在文档和最好的方法上苦苦挣扎。

* 更新 *

这就是我目前的工作。如果我通过:

然后这会重定向到:

...以及配置部分:

acl blog_page path_beg -i /blog
use_backend blog_site if blog_page
backend blog_site
reqrep        ^([^\ :]*)\ \/?(.*)\/blog\/?(.*)    \1\ /\2\3
redirect prefix http://blog.example.co.uk code 301

【问题讨论】:

  • 我已经更新了我的问题以显示我现在的情况,但我认为这可以简化为简单的重定向,而不是创建一个新的backend 服务器。 (仅供参考:网站 blog.example.co.uk 托管在其他地方,不受此 haproxy 实例控制,因此只需执行重定向,然后 dns 将执行正确的解析)
  • 感谢您的更新。有时人们错误地使用了“重定向”这个词,而实际上他们的意思是“前进”,但你并没有犯这个错误。是的,在 HAProxy 1.6 及更高版本的前端部分,这可以简化为单行。我会用一个例子来回答。

标签: url-redirection haproxy


【解决方案1】:

前端部分中的以下行将完成此重写和重定向。

为清楚起见显示为多行,这必须全部出现在配置的单行

http-request redirect 
        code 301 
        location https://blog.example.com%[capture.req.uri,regsub(^/blog,)]  
        if { hdr(host) -i www.example.com } { path_beg /blog }

如果主机标头与 www.example.com 匹配且路径以 blog 开头,则重定向到以文字字符串 https://blog.example.com 开头的位置,然后连接通过获取请求 URI(路径 + 查询字符串)并使用正则表达式得出的值替换从开头删除/blog

验证:

$ curl -v 'http://www.example.com/blog/posts?which=this&that=1'
* Hostname was NOT found in DNS cache
*   Trying 127.0.0.1...
* Connected to www.example.com (127.0.0.1) port 80 (#0)
> GET /blog/posts?which=this&that=1 HTTP/1.1
> User-Agent: curl/7.35.0
> Host: www.example.com
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Content-length: 0
< Location: https://blog.example.com/posts?which=this&that=1

重定向位置似乎正确。

如果要分别重定向 http 和 https,则需要两行,每行测试一个附加条件以确定原始请求是通过 http 还是 https。

使用regsub() 转换器需要HAProxy 1.6+。

【讨论】:

  • 感谢您的代码,刚刚发现我们运行的是 1.5.12 版,所以;正如你所说,regsub() 失败
  • 现在还被告知由于seo我需要保留原始url,这可能吗?
  • 好吧,那么,在这种情况下,您希望将博客服务器配置为后端,并通过代理将请求转发给它,而不是重定向。
  • 解决了 regsub() 这个问题; http-request del-header x-blog-rewrite http-request add-header x-blog-rewrite %[url] if { path_beg /blog } http-request replace-header x-blog-rewrite ^/blog(/.*)?$ /\1 if { hdr_cnt(x-blog-rewrite) gt 0 } 然后用这个; %[hdr(x-blog-rewrite)] 而不是这个; %[capture.req.uri,regsub(^/blog,)]
猜你喜欢
  • 2015-08-26
  • 1970-01-01
  • 2017-01-30
  • 2017-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多