Як я можу використовувати користувацький документ про помилку 503, коли HAProxy надсилає HTTP-код 503?


20

Я хотів би, щоб haproxy використовував власну сторінку документа 503, коли сервер (бекенд) надсилає код HTTP 503. Це можливо?

Ви бачили щось на кшталт умов "невдачі монітора", але не знаєте, як додати його до інтерфейсу.

Відповіді:


23

Ви можете скористатися errorfileдирективою, а потім спеціальним .httpтекстовим файлом. Так, наприклад:

errorfile 503 /etc/haproxy/errors/503-mycustom.http

Вміст файлу буде таким чином:

HTTP/1.0 503 Service Unavailable
Cache-Control: no-cache
Connection: close
Content-Type: text/html

<html> 
  <head>
    <title>RARRR!!!!!</title>
  </head> 
  <body style="font-family:Arial,Helvetica,sans-serif;">
    <div style="margin: 0 auto; width: 960px;"> 
          <h2 >RAWR RAWR RAWR</h2>
    </div>
  </body> 
</html>

errorfileДиректива може бути специфічною для внутрішнього інтерфейсу , а також.

Параметр "файл помилок" не може бути використаний для зміни відповіді, надісланої HAProxy, якщо вузли в мережі. Цей параметр впливає на HAProxy лише тоді, коли всі вузли в режимі офлайн.

Важливо розуміти, що це ключове слово не призначене для перезапису помилок, повернених сервером, але помилок, виявлених та повернених HAProxy. Ось чому список підтримуваних помилок обмежений невеликим набором.


2
Зауважте, що .http файл повинен використовувати \r\nдля розривів рядків у заголовках, щоб відповідати специфікації протоколу HTTP. Якщо ви завантажуєте з вікна вікна, переконайтеся, що використовується binaryрежим передачі файлів s / ftp, щоб пропустити перетворення розривів рядків Windows в розриви рядків \r\nу стилі Unix \n.
wqw

6

Ви можете зробити щось брудне. Ви можете заблокувати відповіді 503, що призведе до повернення користувацької помилки 502, для якої можна створити сторінку помилок. Однак майте на увазі, що будь-яка причина, якій хапрокси повинен був би повернути 502 (недійсна відповідь), поверне те саме.

В основному це так просто, як "rspdeny ^ HTTP / 1.1 503" у поєднанні з "filefile 502".


5

У нас є частина нашого веб-сайту, яка працює за попередньою системою, і я перейшов до наступного:

errorfile 502 /etc/haproxy/errors/502.http

acl is_internal_error status ge 500

rspideny . if is_internal_error

Сподіваюся, це допоможе (навіть якщо це через 8 місяців).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.