У меня 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 нашел решение здесь:
https://www.mail-archive.com/[email protected]/msg25061.html
http-request redirect location "https://blah..\r\nDate: xyz"
Проблема, которую я хотел решить, заключалась в добавлении заголовка HSTS, но, полагаю, его можно было бы использовать для даты.
Это некрасиво, но работает, и я только что реализовал это. Мы также хотели отобразить заголовок, идентифицирующий блок, который генерирует перенаправление, поскольку у нас есть несколько блоков HaProxy.
Это было проверено мной в HaProxy 1.6, за другие версии я не ручаюсь.
решение2
Это невозможно ни для одного браузера, который когда-либо видел перенаправление. Оно кэшируется на неопределенный срок. Перенаправление 301 следует использовать только тогда, когда вы навсегда удаляете сайт, и даже в этом случае это плохая идея — вы теряете видимость трафика, который все еще попадает на старый сайт.
Поэтому измените его на редирект 302, прежде чем что-либо делать.
Haproxy не является веб-сервером. Он не имеет средств для генерации заголовка, содержащего динамические данные - если вам действительно нужен заголовок даты, используйте веб-сервер. Есть несколько легковесных, способных выполнить эту задачу.
Или расскажите нам, почему вынуждатьсятакой заголовок, и мы, возможно, сможем посоветовать более подходящее решение.
решение3
Я нашел в обсуждении проблемы на github, что это возможно, начиная с Haproxy 2.2
https://stackoverflow.com/a/72830822/1849577
http-after-response set-header Cache-Control max-age=3600 if {condition}