ฉันต้องการ 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