HAProxy URL เขียนซ้ำในข้อผิดพลาด 404


9

วิธีการทำให้ HAProxy เขียนซ้ำไปยังส่วนหลังอื่นเมื่อไฟล์แรกหายไป? สิ่งที่ฉันต้องการคือerrorlocการเขียนใหม่แทนที่จะเปลี่ยนเส้นทางดังนั้นลูกค้าจึงไม่ทราบว่าจะเปลี่ยนเส้นทาง

เราได้พัฒนาแอปพลิเคชันโดยคำนึงถึง NginX ซึ่งเป็นทั้งโหลดบาลานซ์บาลานซ์พร็อกซีย้อนกลับและเว็บเซิร์ฟเวอร์สำหรับไฟล์คงที่ แอปพลิเคชันขึ้นอยู่กับกรอบOpaซึ่งต้องการเซสชันที่ยึดตามคุกกี้ - ได้รับการสนับสนุนโดย NginX และ HAproxy คุณลักษณะแอปพลิเคชันที่เรามีปัญหาคือการสร้างเนื้อหาแบบไดนามิก มันสร้างภาพตามต้องการ แต่หลังจากรุ่นมันจะถูกบันทึกไว้ในดิสก์และสามารถเข้าถึงได้แบบคงที่ด้วยเส้นทางที่กำหนด

ปัญหาได้รับการแก้ไขอย่างง่ายดายด้วย NginX - พยายามอ่านไฟล์โลคัลและใช้โหลดบาลานซ์แบ็คเอนด์เฉพาะในกรณีที่ไฟล์หายไป (ยังไม่ได้สร้าง):

server {
  server_name wkaliszu.pl;
  location /thumb {
    root /path_on_disk/to_cached_content;
    expires 7d;
    # try to access already generated content
    try_files $uri @wkaliszu;
  }
  location / {
    # reverse proxy to the application
    [...]
  }
  location @wkaliszu {
    # reverse proxy to the application
    [...]
  }
}

เซิร์ฟเวอร์ถูกโอนย้ายและตอนนี้ใช้ HAPproxy สำหรับการทำโหลดบาลานซ์ซึ่งไม่ใช่เว็บเซิร์ฟเวอร์และไม่รองรับคุณสมบัตินี้ ขณะนี้การสร้างซอฟต์แวร์แบบไดนามิกจะดำเนินการในแต่ละครั้งที่ลูกค้าพยายามเข้าถึงทรัพยากรสิ่งที่ช้ากว่ามากและสิ้นเปลืองทรัพยากร มันจะดีถ้ามันสามารถใช้ back-end ถัดไปถ้าเว็บเซิร์ฟเวอร์แคชแบบธรรมดาสำหรับไฟล์คงที่ล้มเหลวด้วยข้อผิดพลาด 404 แต่ฉันไม่สามารถหาวิธีที่จะทำได้อย่างง่ายดาย การเปลี่ยนเส้นทาง/thumbไปยัง NginX ซึ่งพยายามอ่านไฟล์สแตติกและเขียนใหม่อีกครั้งเพื่อ HAproxy ด้วยส่วนหัว HTTP ใหม่เท่านั้นที่อยู่ในใจ แต่ฉันต้องการค้นหาสิ่งที่ดีกว่า


แอพพลิเคชั่นเซิร์ฟเวอร์แอพพลิเคชั่นใดที่คุณใช้แบ็กเอนด์
jeffatrackaid

คำตอบ:


1

แบ็กเอนด์ของ HAProxy ไม่ว่าจะขึ้นหรือลง (หรือกำลังจะขึ้น / ลง)

มีหลายวิธีในการตรวจสอบสุขภาพของแบ็กเอนด์ แต่ฉันไม่ทราบว่ามีการติดตามตามคำขอหรือไม่ เมื่อคำขอล้มเหลวแบ็กเอนด์นั้นจะถูกทำเครื่องหมายว่าไม่ทำงานหรือล้มเหลว (กำลังจะถูกพิจารณา)

นี่เป็นตรรกะที่แตกต่างจากการตั้งค่า Nginx ของคุณซึ่งเป็นคำขอเส้นทางในแต่ละคำขอ

ฉันเห็นตัวเลือกสองสามตัวที่นี่:

  • Nginx เป็น Caching Proxy
  • ใช้เซิร์ฟเวอร์แอปสำหรับเนื้อหาแบบคงที่
  • ใช้ CDN

แคชพร็อกซี

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

ใช้เซิร์ฟเวอร์แอปสำหรับเนื้อหาแบบคงที่

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

ตัวเลือก CDN

หากคุณสามารถใช้โดเมนเฉพาะสำหรับเนื้อหาแบบคงที่คุณอาจจะสามารถใช้ CDN ที่ CDN คุณเพียงชี้ไปที่ URL ต้นทางไปยังโหนดแอปพลิเคชันของคุณ คุณสามารถควบคุมการแคชที่ระดับ CDN สิ่งนี้คล้ายกับการแคช Nginx ด้านบนยกเว้นผู้ให้บริการ CDN กำลังจัดการให้คุณ

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