如何让HA代理自行关注重定向?

时间:2018-06-13 18:50:41

标签: java http redirect web haproxy

我有通过HA Proxy与第三方服务对话的java客户端。第三方服务最近被更改了,所以现在它返回302(暂时移动)而不是200(确定),这导致我的Java客户端失败,因为它期望200具有实际响应。出于多种原因,我想避免对Java客户端进行任何代码更改。

所以,问题是:有没有办法让HA代理自己遵循重定向,只返回结果(而不是3xx http代码)到客户端?

还有一点需要提及:我通过http访问HA代理,HA代理通过https访问第三方资源,并返回302位于https上的位置。位置不同,因此无法将HA Proxy配置到新位置。

HA代理版本:HA-Proxy version 1.7.5 2017/04/03

操作系统:CentOS Linux release 7.2.1511 (Core)

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

您可以使用此

$ haproxy -v
Nuster version 1.8.8.2.2
Copyright (C) 2017-2018, Jiang Wenyuan, <koubunen AT gmail DOT com >

HA-Proxy version 1.8.8.2 2018/05/29
Copyright 2000-2018 Willy Tarreau <willy@haproxy.org>

<强> haproxy.conf

global
    debug
    lua-load handle_redirect.lua

frontend web1
    bind *:8080
    mode http

    default_backend app1

backend app1
    mode http

    http-response lua.handle_redirect if { status eq 301 }

    server s1 127.0.0.1:9000

<强> handle_redirect.lua

http = require("http")

core.register_action("handle_redirect", {"http-res"}, function(txn)

  local hdr = txn.http:res_get_headers()
  if hdr["location"] == nil then
    return nil
  end


  local r, msg = http.get{
    url = hdr["location"][0]
  }

  if r == nil then
    return msg
  end

  local res = "HTTP/1.1 " .. r.status_code .. " " .. r.reason .. "\r\n"
  for k, v in pairs(r.headers) do
    res = res .. k .. ": " .. v .. "\r\n"
  end
  res = res .. "\r\n"
  res = res .. r.content


  txn.res:set(res)
  txn.done(txn)

end)

https://github.com/haproxytech/haproxy-lua-http/blob/master/http.lua

下载http.lua
haproxy -f haproxy.conf

答案 1 :(得分:1)

好像你正试图解决错误的问题。

听起来网站正在返回302 ,因为您没有使用HTTPS。因此,请将代理配置为使用HTTPS。

server foo foo.example.com:443 ssl verify none

您不必使用HTTPS访问代理,但代理需要使用HTTPS发出出站请求。

此外,HAProxy不能满足您的要求。可以在返回响应时修改响应,但不能强制代理遵循重定向。