В Haproxy, как я могу перенаправить на пользовательскую страницу 404, но все равно вернуть код состояния 404? - PullRequest
1 голос
/ 28 марта 2019

У меня есть серверная часть по умолчанию для haproxy, настроенная на S3, и она содержит статические файлы.Моя проблема ... в том случае, если маршрут проходит через бэкэнд по умолчанию, а затем не удается найти ресурс, который я хочу перехватить для этого 404, и отобразить мою собственную страницу 404 (которая также находится в том же расположении бэкэнда S3), новсе равно вернуть статус 404.У меня это пока что, но оно зависит от перенаправления 302, которое является статусом, возвращаемым браузеру, и я хочу 404 (/404.html - моя пользовательская страница «не найдена»);

backend static_s3
  errorfile 503 /etc/haproxy/errors/index.html  
  http-response set-header Location /404.html if { status eq 404 }
  http-response set-status 302 if { status eq 404 }
...

ИтакЯ хочу видеть свою пользовательскую страницу «не найден», но браузер распознает ее как код состояния 404, это можно сделать?

ps было бы хорошо, если бы Haproxy позволил вам сделать что-то подобное в бэкэндесечение;

errorfile 404 /etc/haproxy/errors/404/index.html

1 Ответ

0 голосов
/ 01 апреля 2019

Хммм, трудно изменить тело ответа http с помощью HAProxy, поэтому вы можете попробовать одну из следующих альтернатив:

  1. Если вы можете использовать CloudFront вместо корзины S3 напрямую, вы можете настроить CloudFront для возврата пользовательской страницы ошибки 404.

  2. Если вы можете переключить свой обратный прокси-сервер на nginx, вы можете довольно легко установить страницу ошибки с помощью директивы error_page

Если ни одна из этих альтернатив не работает для вас, вы можете использовать Lua для внутреннего перенаправления. Вот ответ о переполнении стека, который описывает, как сделать this .

...