HAProxy HTTP通道代理而不是304重定向

时间:2019-02-08 09:39:37

标签: reverse-proxy haproxy

我正在尝试获得与nginx通道相同的效果,在该通道中,用户可以在地址栏中看到我的网站url,但所有内容都可以从另一个网站代理。

此刻,下面的代码通过返回304而不是代理流量将用户重定向到example2。

我需要它与http(不是tcp)配合使用,因为我需要将其作为AB测试的一部分,在该测试中需要检查cookie。请检查下面代码中的注释,以了解我要做什么。

defaults
        mode http
        log global
        option httplog
        log 127.0.0.1 local0
        timeout connect 5000ms
        timeout client 50000ms
        timeout server 50000ms

listen  http
        bind 127.0.0.1:8080

        acl set_cookie path_beg /set-cookie

        use_backend b-backend if { req.cook(SITEID) -m beg b-backend }
        use_backend b-backend if set_cookie

        default_backend ab-split-backend

backend a-backend
        option forwardfor
        server example1 example1.com:443 check maxconn 3000 inter 30s

backend b-backend
        cookie SITEID insert
        option http_proxy
        # how do I get example2 to passtrough and not 304 redirect?
        server example2 example2.com:443 check maxconn 3000 inter 30s

backend ab-split-backend
        balance roundrobin
        cookie SITEID insert indirect nocache maxlife 48h

        # how do I get example2 to passtrough?
        server example2 example2.com:443 weight 50 cookie b-backend

        server example1 example1.com:443 weight 50 cookie a-backend

2 个答案:

答案 0 :(得分:2)

HTTP 304并不是真正的重定向,它是一个空的响应,指示Not Modified,它告诉客户端服务器将以200进行响应并提供内容,但是请求了资产没有更改,因此客户端只能使用其缓存的内容。

因此,我不确定您看到的是不正确的行为。也就是说,您的请求可能正在顺利通过,并且后端服务器可能正确响应了304

服务器根据请求标头If-Modified-Since和/或If-None-Match中提供的信息,决定对此代码做出响应。因此,如果您确实想禁用此缓存机制并确保每次都具有完整的200响应,则可以指示HAProxy从传入请求中删除以下标头:

listen  http
        bind 127.0.0.1:8080

        acl set_cookie path_beg /set-cookie

        # Delete headers related to caching
        http-request del-header If-Modified-Since
        http-request del-header If-None-Match

        use_backend b-backend if { req.cook(SITEID) -m beg b-backend }
        use_backend b-backend if set_cookie

        default_backend ab-split-backend

答案 1 :(得分:0)

您似乎想做的事情是阻止系统尝试通过SSL传递系统,而是为了测试目的而进行基于文本的清晰评估。我建议您在下面的http-request重定向配置中查看一个代码段,并查看HAProxy方案。我还建议您查看基于实例的重定向的其他示例,特别是针对指定位置的重定向,这样您就不会意外地对要保持加密状态的流量进行解密。

对于从其他位置代理的信息,最好的选择是使用Cloudflare,尤其是当您正在寻找某种形式的DDoS /附加安全层时。替代方法是构建自己的自定义防DDoS解决方案,这是一个很大的难题。

frontend ALL
 bind   *:80
 bind   *:443 alpn h2,http/1.1 ssl crt /etc/haproxy/certs/eduarmor.com.pem
 http-request redirect scheme https code 301 if !{ ssl_fc }
 http-request redirect code 301 location http://www.%[hdr(host)]%[capture.req.uri] if { hdr(Host) -i eduarmor.com }
 mode   http