我正在尝试获得与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
答案 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