Haproxy 修改部分 url

Haproxy 修改部分 url

我有一个已重命名的应用程序,我希望 Haproxy 重定向到正确的路径,同时保留请求参数

这就是我所拥有的:

acl old_name path_dir -i /old_name
   http-request set-path /new_name/%[query] if old_name

我希望它从

www.site.com/old_name/Default.aspx?Id=123

www.site.com/new_name/Default.aspx?Id=123 but this is not working. 

答案1

使用 HAProxy 1.5:使用临时标头从请求中的现有路径构建新路径,然后直接执行重定向

# Clean the request and remove any existing header named X-Rewrite
http-request del-header X-REWRITE

# Copy the full request URL into X-Rewrite unchanged
http-request add-header X-REWRITE %[url] if { path_beg /old_path }

# Change the X-REWRITE header to contain out new path
http-request replace-header X-REWRITE ^/old_path(/.*)?$ /new_path\1 if { hdr_cnt(X-REWRITE) gt 0 }

# Perform the 301 redirect
http-request redirect code 301 location http://%[hdr(host)]%[hdr(X-REWRITE)] if { hdr_cnt(X-REWRITE) gt 0 }

在 HAProxy 1.6 中,使用 regsub 过滤器

http-request redirect code 301 location http://%[hdr(host)]%[url,regsub(^/old_path,/new_path,)] if { path_beg /old_path }

来源之中其他有用的配置片段

更多信息请访问regsub 关键字的 HAProxy 文档

答案2

你很困惑url 重定向网址重写到后端。

你是否应该想要改写,然后根据 haproxy 1.6 文档:

  • “set-path”用格式字符串的评估结果重写请求路径。查询字符串(如果有)保持不变。

因此正确的配置在这种情况下将会 :

acl old_name path_dir -i /old_name
http-request set-path /new_name if old_name

重定向用户 :

redirect location /new_name if old_name

答案3

对于任何试图从 uri 更改为 REST API 的人,不要使用 http 请求重定向位置因为标头数据已丢失。使用http 请求 set-uri

http-request set-uri %[url,regsub(^/old,/new,)] if { path_beg /old }

相关内容