我有 HAProxy 1.5.8。
我有这个基本的 301 规则:
frontend http_frontend
bind *:80
mode http
redirect location https://xxxx.com code 301
响应如下所示:
HTTP/1.1 301 Moved Permanently
Content-length: 0
Location: https://xxxx.com
Connection: close
我需要在标题中添加日期,就像常规的网络服务器所做的那样。
雷斯帕德功能似乎不会影响重定向。
是否可以 ?
答案1
这是可以做到的,HaProxy 的 Willy 在这里找到了解决方案:
https://www.mail-archive.com/[电子邮件保护]/msg25061.html
http-request redirect location "https://blah..\r\nDate: xyz"
我想要解决的问题是添加 HSTS 标头,但我想您可以将它用于日期。
它并不漂亮,但确实有效,而且我刚刚实现了它,对于我们来说,我们还想呈现一个标头来标识生成重定向的框,因为我们有多个 HaProxy 框。
我在 HaProxy 1.6 中对此进行了测试,我不能保证其他版本也如此。
答案2
对于任何曾经见过重定向的浏览器来说,这都是不可能的。它会被无限期地缓存。301 重定向只应在您永久停用网站时使用,即使这样,这也是一个坏主意 - 您会失去对仍在访问旧网站的流量的可见性。
因此,在执行任何其他操作之前,请将其更改为 302 重定向。
Haproxy 不是 Web 服务器。它无法生成包含动态数据的标头 - 如果您确实需要日期标头,请使用 Web 服务器。有几种轻量级的 Web 服务器可以完成此任务。
或者告诉我们为什么需要这样的标题,我们也许能够提供更恰当的解决方案的建议。
答案3
我在 github 问题讨论中发现从 Haproxy 2.2 开始这是可能的
https://stackoverflow.com/a/72830822/1849577
http-after-response set-header Cache-Control max-age=3600 if {condition}