ฉันจะใช้เอกสารข้อผิดพลาด 503 ที่กำหนดเองได้อย่างไรเมื่อ HAProxy ส่งรหัส HTTP 503


20

ฉันต้องการ haproxy ที่จะใช้หน้าเอกสารของตัวเอง 503 เมื่อเซิร์ฟเวอร์ด้านหลัง (แบ็กเอนด์) ส่งรหัส HTTP 503 มันเป็นไปได้?

เคยเห็นบางอย่างเช่น "การตรวจสอบล้มเหลว" แต่ไม่ทราบวิธีเพิ่มลงในส่วนหน้า

คำตอบ:


22

คุณสามารถใช้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สั่งสามารถที่เฉพาะเจาะจงกับแบ็กเอนด์เช่นกัน

ไม่สามารถใช้การตั้งค่า "errorfile" เพื่อเปลี่ยนการตอบกลับที่ส่งโดย HAProxy หากโหนดออนไลน์ การตั้งค่านี้มีผลกับ HAProxy เฉพาะเมื่อโหนดทั้งหมดออฟไลน์

สิ่งสำคัญคือต้องเข้าใจว่าคำหลักนี้ไม่ได้หมายถึงการเขียนข้อผิดพลาดที่ส่งคืนโดยเซิร์ฟเวอร์ แต่ตรวจพบข้อผิดพลาดและส่งกลับโดย HAProxy นี่คือสาเหตุที่รายการข้อผิดพลาดที่สนับสนุนถูก จำกัด ไว้ที่ชุดเล็ก


2
โปรดทราบว่าไฟล์. http ต้องใช้\r\nสำหรับการแบ่งบรรทัดในส่วนหัวเพื่อให้สอดคล้องกับข้อกำหนดคุณสมบัติโปรโตคอล HTTP หากการอัปโหลดจากหน้าต่างกล่องให้แน่ใจว่าจะใช้binaryโหมด S / การถ่ายโอนไฟล์ FTP ที่จะข้ามแปลงแบ่งหน้าต่างสายการยูนิกซ์แบ่งบรรทัดสไตล์\r\n \n
wqw

6

มีบางอย่างสกปรกที่คุณสามารถทำได้ คุณสามารถบล็อกการตอบสนอง 503 ซึ่งจะส่งกลับข้อผิดพลาด 502 ที่กำหนดเองซึ่งคุณสามารถสร้างหน้าข้อผิดพลาด อย่างไรก็ตามโปรดทราบว่าเหตุผลใด ๆ haproxy จะต้องส่งคืน 502 (การตอบสนองที่ไม่ถูกต้อง) จะส่งคืนสิ่งเดียวกัน

โดยพื้นฐานแล้วมันง่ายเหมือน "rspdeny ^ HTTP / 1.1 503" รวมกับ "errorfile 502"


5

เรามีส่วนหนึ่งของเว็บไซต์ของเราที่ทำงานบนระบบเดิมและฉันก็ลงเอยด้วยการใช้สิ่งต่อไปนี้:

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

acl is_internal_error status ge 500

rspideny . if is_internal_error

หวังว่าจะช่วยได้ (แม้ว่าจะเป็น 8 เดือนต่อมา)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.