Балансировка Нагрузки. Как Реализовать Собственные Ответы Haproxy 404?

  • Автор темы IrredeNoF
  • Обновлено
  • 18, Oct 2024
  • #1

Моя цель — создать собственный код ошибки 404 HTTP, который будет зависеть от языка пользователя. Я думал, что смогу использовать язык принятия заголовка.

Я думал о чем-то вроде этого:

#создаем 2 ACL, которые принимают только один язык.

 
 
 
 # Defining HTTP errors
http-errors pl_ver

errorfile 404 /path/to/file
http-errors en_ver

errorfile 404 /path/to/file

# Setting variable (under frontend section)

http-request set-var(txn.lang) req.hdr(Accept-Language)

# Feeding with response

http-response return status 404 errorfiles pl_ver if { status 404 } { var(txn.lang) pl }

http-response return status 404 errorfiles en_ver if { status 404 } { var(txn.lang) en }
 

#и здесь я хотел бы использовать бэкэнды, зависит от ACL

http-errors pl_ver errorfile 404 /path/to/file http-errors en_ver errorfile 404 /path/to/file acl en req.fhdr(accept-language),language(en;pl) -m str en acl pl req.fhdr(accept-language),language(en;pl) -m str pl http-response status 404 errorfiles pl_ver if { status 404 } { pl } http-response status 404 errorfiles en_ver if { status 404 } { en }

Есть идеи, как это реализовать?

@first_edit 7.07.2021

Я создал это, используя Самита совет:

use_backend polish404 if pl use_backend english404 if en backend polish404 mode http errorfile 503 /path/to/file backend english404 mode http errorfile 503 /path/to/file

У кого-нибудь есть идеи, как это реализовать по-другому?

@второй_edit 24.07.2021

У меня есть лучшая реализация этой проблемы

acl en req.fhdr(accept-language),language(en;pl) -m str en acl pl req.fhdr(accept-language),language(en;pl) -m str pl

для будущих ищущих вот вам:

IrredeNoF


Рег
27 Jun, 2015

Тем
80

Постов
189

Баллов
619
  • 25, Oct 2024
  • #2

Вы можете использовать http-ошибки для создания различных кодов ошибок и сопоставлений файлов.

После этого вы можете легко использовать

 http-errors site1

errorfile 404 /etc/haproxy/errors/site1-404.http

http-errors site2

errorfile 404 /etc/haproxy/errors/site2-404.http

frontend allsites

bind :80

default_backend site1-servers

use_backend site2-servers if { req.hdr(host) site2.com }

# Store host header in variable

http-request set-var(txn.host) req.hdr(host)

# Use site1 error page if site1.com

http-response return status 404 errorfiles site1 if { status 404 } { var(txn.host) site1.com }

# Use site2 error page if site2.com

http-response return status 404 errorfiles site2 if { status 404 } { var(txn.host) site2.com }
 
in haproxy config to return based on the error code. An example is below:

http-response

Вы также можете динамически генерировать разные страницы ошибок 404 из одного шаблона, передавая параметры запроса из haproxy в шаблон ошибок. Я бы рекомендовал пройти через это блог хапрокси

 

Имхо


Рег
28 Oct, 2012

Тем
72

Постов
203

Баллов
573
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно