Внедрить заголовок в функцию перенаправления HAProxy

Внедрить заголовок в функцию перенаправления HAProxy

У меня 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}

Связанный контент