ทำหน้าที่ 404 จาก HAProxy เมื่อไม่ตรงกับ acls


15

ฉันกำลังกำหนดค่า HAProxy อีกครั้งโดยใช้ 1.5dev-17 สิ่งที่ฉันต้องการจะทำคือคืนข้อผิดพลาด 404 เมื่อไม่มีแบ็กเอนด์ที่จะใช้สำหรับคำขอเฉพาะ

การกำหนดค่าปัจจุบันของเราใช้ default_backend เพื่อกำหนดเส้นทางไปยังเซิร์ฟเวอร์แอพ django ของเรา แต่เมื่อมีคำขอตรวจสอบจำนวนมาก (เช่นการทดสอบด้วยปากกา) ที่ตรงกับแบ็กเอนด์ที่กำหนดค่าอื่น ๆ เซิร์ฟเวอร์ django ของเราจะหยุดชะงักในขณะที่พยายาม เพื่อตอบสนองคำขอที่ไม่ถูกต้องเหล่านี้ในที่สุดก็ส่งคืน 404

ฉันต้องการรับใช้ 404 จาก HAProxy แทนที่จะมอบหมายให้กับแบ็กเอนด์ django ขณะนี้ฉันประสบความสำเร็จด้วยแฮ็ค:

frontend www
    ...
    default_backend nomatch

backend nomatch
    errorfile 503 /var/www/http/404.http

และภายในไฟล์ 404.http ฉันตั้งรหัสสถานะ 404 ในส่วนหัว ใช้งานได้ แต่รู้สึกผิดมาก มีวิธีที่ดีกว่าในการบรรลุเป้าหมายนี้ด้วย HAProxy หรือไม่? หรือฉันควรใช้แบ็กเอนด์เป็นประจำและให้ที่จัดการกับการตอบสนองกับ 404?


เนื้อหาของไฟล์ 404.http คืออะไร
Jason Floyd

3
@ JasonFloyd HTTP/1.0 404 Not Foundตามด้วยส่วนหัวอื่น ๆ จากนั้นเป็นบรรทัดว่างแล้วตามด้วย<html>เนื้อหา
Josh Smeaton

คำตอบ:


4

หากคุณจะโอเคกับรหัสตอบกลับใด ๆ ต่อไปนี้: 200, 400, 403, 405, 408, 429, 500, 502, 503, หรือ 504

จากนั้นคุณสามารถทำสิ่งนี้:

frontend www
  ...
  default_backend no-match

backend no-match
  http-request deny deny_status 400

2

หลังจากที่ต้องการสิ่งที่คล้ายกันนี้เป็นสิ่งเดียวกันฉันมาด้วย มันรู้สึกผิด แต่มันใช้งานได้ดีในทางปฏิบัติและสะอาดกว่าการพยายามทำบัญชีดำ URL เฉพาะ เพียงให้แน่ใจว่าได้แสดงความคิดเห็นดังนั้นจึงไม่มีใครคิดว่ามันไม่ถูกต้อง

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