如果来自HTTP服务器的响应为404,我正在寻找重定向到另一个域的解决方案。
acl not_found status 404
acl found_ceph status 200
use_backend minio_s3 rsprep ^HTTP/1.1\ 404\ (.*)$ HTTP/1.1\ 302\ Found\nLocation:\ / if not_found
use_backend ceph if found_ceph
但仍然无效,此规则将转至minio_s3后端。
谢谢你的建议。
答案 0 :(得分:0)
当此后端的响应状态为404时,首先添加Location
标头,将浏览器发送到原始URI完整的example.com
,然后将状态代码设置为302,以便浏览器执行重定向。
backend my-backend
mode http
server my-server 203.0.113.113:80 check inter 60000 rise 1 fall 2
http-response set-header Location http://example.com%[capture.req.uri] if { status eq 404 }
http-response set-status 302 if { status eq 404 }
测试:
$ curl -v http://example.org/pics/funny/cat.jpg
* Hostname was NOT found in DNS cache
* Trying 127.0.0.1...
* Connected to example.org (127.0.0.1) port 80 (#0)
> GET /pics/funny/cat.jpg HTTP/1.1
> User-Agent: curl/7.35.0
> Host: example.org
> Accept: */*
实际的后端会返回404,但我们看不到它。代替...
< HTTP/1.1 302 Moved Temporarily
< Last-Modified: Thu, 04 Aug 2016 16:59:51 GMT
< Content-Type: text/html
< Content-Length: 332
< Date: Sat, 07 Oct 2017 00:03:22 GMT
< Location: http://example.com/pics/funny/cat.jpg
来自后端404错误页面的响应正文仍然会被发送到浏览器,但是 - 事实证明 - 浏览器不会显示它,所以不会造成任何伤害。这需要HAProxy 1.6或更高版本。