HAProxy bir 503 HTTP kodu gönderdiğinde özel bir 503 hata belgesini nasıl kullanabilirim?


20

Arka sunucu (arka uç) HTTP 503 kodu gönderdiğinde haproxy'nin kendi 503 belge sayfasını kullanmasını istiyorum. Mümkün mü?

"Monitör başarısız" koşulları gibi bir şey gördünüz ama nasıl ön uca eklemek bilmiyorum.

Yanıtlar:


23

Sen kullanabilirsiniz errorfileyönergesi ve sonra özel bir .httpmetin dosyası. Yani mesela:

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

Dosyanın içeriği şöyle olur:

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>

errorfileYönergesi de bir arka uca özel olabilir.

"Errorfile" ayarı, düğümler çevrimiçi olduğunda HAProxy tarafından gönderilen bir yanıtı değiştirmek için kullanılamaz. Bu ayar yalnızca tüm düğümler çevrimdışı olduğunda HAProxy'yi etkiler.

Bu anahtar kelimenin sunucu tarafından döndürülen hataları değil, HAProxy tarafından algılanan ve döndürülen hataları yeniden yazmak anlamına geldiğini anlamak önemlidir. Bu nedenle desteklenen hatalar listesi küçük bir kümeyle sınırlıdır.


2
.Http dosyasının \r\n, HTTP protokolü belirtimlerine uymak için başlıklardaki satır kesmeleri için kullanılması gerektiğini unutmayın . Windows kutusundan yükleme yapıyorsanız, binaryWindows satır sonlarını \r\nunix stil satır sonlarına dönüştürmeyi atlamak için s / ftp dosya aktarımı için modu kullandığınızdan emin olun \n.
wqw

6

Yapabileceğiniz kirli bir şey var. Bir hata sayfası oluşturabileceğiniz özel 502 hatasının döndürülmesine neden olacak 503 yanıtlarını engelleyebilirsiniz. Ancak, haproxy'nin 502 (geçersiz yanıt) döndürmesi için herhangi bir nedenin aynı şeyi döndüreceğini unutmayın.

Temelde "rfdeny ^ HTTP / 1.1 503" kadar basit bir şekilde "errorfile 502" ile birleştirilmiştir.


5

Web sitemizin eski bir sistemde çalışan bir kısmı var ve ben aşağıdakileri kullandım:

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

acl is_internal_error status ge 500

rspideny . if is_internal_error

Umarım yardımcı olur (8 ay sonra bile olsa).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.