ฉันต้องการ haproxy ที่จะใช้หน้าเอกสารของตัวเอง 503 เมื่อเซิร์ฟเวอร์ด้านหลัง (แบ็กเอนด์) ส่งรหัส HTTP 503 มันเป็นไปได้?
เคยเห็นบางอย่างเช่น "การตรวจสอบล้มเหลว" แต่ไม่ทราบวิธีเพิ่มลงในส่วนหน้า
ฉันต้องการ haproxy ที่จะใช้หน้าเอกสารของตัวเอง 503 เมื่อเซิร์ฟเวอร์ด้านหลัง (แบ็กเอนด์) ส่งรหัส HTTP 503 มันเป็นไปได้?
เคยเห็นบางอย่างเช่น "การตรวจสอบล้มเหลว" แต่ไม่ทราบวิธีเพิ่มลงในส่วนหน้า
คำตอบ:
คุณสามารถใช้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 นี่คือสาเหตุที่รายการข้อผิดพลาดที่สนับสนุนถูก จำกัด ไว้ที่ชุดเล็ก
มีบางอย่างสกปรกที่คุณสามารถทำได้ คุณสามารถบล็อกการตอบสนอง 503 ซึ่งจะส่งกลับข้อผิดพลาด 502 ที่กำหนดเองซึ่งคุณสามารถสร้างหน้าข้อผิดพลาด อย่างไรก็ตามโปรดทราบว่าเหตุผลใด ๆ haproxy จะต้องส่งคืน 502 (การตอบสนองที่ไม่ถูกต้อง) จะส่งคืนสิ่งเดียวกัน
โดยพื้นฐานแล้วมันง่ายเหมือน "rspdeny ^ HTTP / 1.1 503" รวมกับ "errorfile 502"
เรามีส่วนหนึ่งของเว็บไซต์ของเราที่ทำงานบนระบบเดิมและฉันก็ลงเอยด้วยการใช้สิ่งต่อไปนี้:
errorfile 502 /etc/haproxy/errors/502.http
acl is_internal_error status ge 500
rspideny . if is_internal_error
หวังว่าจะช่วยได้ (แม้ว่าจะเป็น 8 เดือนต่อมา)
\r\nสำหรับการแบ่งบรรทัดในส่วนหัวเพื่อให้สอดคล้องกับข้อกำหนดคุณสมบัติโปรโตคอล HTTP หากการอัปโหลดจากหน้าต่างกล่องให้แน่ใจว่าจะใช้binaryโหมด S / การถ่ายโอนไฟล์ FTP ที่จะข้ามแปลงแบ่งหน้าต่างสายการยูนิกซ์แบ่งบรรทัดสไตล์\r\n\n