การกำหนดค่า nginx เพื่อลองเซิร์ฟเวอร์ upstream เดี่ยวอีกครั้ง


9

ฉันใช้ nginx เป็น reverse proxy และฉันต้องการให้รอสักครู่และลองใหม่อีกครั้งหากเซิร์ฟเวอร์ upstream ไม่ตอบสนอง วิธีนี้ฉันสามารถรีสตาร์ทเซิร์ฟเวอร์อัพสตรีมของฉันและแทนที่จะเห็นผู้ใช้เห็นเกตเวย์ไม่ถูกต้อง 502 เบราว์เซอร์ของพวกเขาก็ค้างอยู่สองสามวินาที (กระบวนการรีสตาร์ทจะใช้เวลา 3 หรือ 4 วินาที) ฉันได้ลองทำสองสามอย่างฉันใส่สิ่งนี้ลงในบล็อกเซิร์ฟเวอร์ของฉัน:

proxy_connect_timeout 60;
proxy_send_timeout 15;
proxy_read_timeout 20;

แต่ดูเหมือนจะไม่ทำอะไรเลย ฉันยังพยายามเพิ่มสิ่งนี้ในบล็อกอัปสตรีม:

server 127.0.0.1:3001 fail_timeout=10s;

อีกครั้งไม่ใช่สิ่งที่ฉันต้องการ

เป็นไปได้ไหม ฉันพลาดอะไรไป

คำตอบ:


1

คำสั่งที่คุณลองใช้นั้นมีความหมายสำหรับสิ่งที่แตกต่างจากที่คุณต้องการ อ่านเอกสารของพวกเขา

upstream เอกสารคำสั่งอธิบายอย่างละเอียดว่าการทำงานของบล็อก upstream:

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

ทุกอย่างบอกว่ามี

อย่างไรก็ตามคุณอาจสามารถประมวลผลโค้ดระบุความผิดพลาดที่ส่งคืนจากแบ็กเอนด์โดยขัดขวางมัน proxy_intercept_errors แล้วส่ง $request_uri เพื่อสคริปต์พิเศษจัดการกับมันในนามของลูกค้าเดิม

พื้นฐานคือ: คุณต้องใช้รหัส / แอปพลิเคชันตรรกะเพื่อลองฝั่งไคลเอ็นต์ (หรือส่วนหน้า) อีกครั้ง


0

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

  • สำรวจเซิร์ฟเวอร์ปัจจุบันของคุณจนกว่าจะกลับมาออนไลน์
  • จากนั้นตอบกลับด้วยการเปลี่ยนเส้นทาง 302 หรืออื่น ๆ เพื่อให้เบราว์เซอร์พยายามอีกครั้ง

เซิร์ฟเวอร์นี้จะถูกทำเครื่องหมายด้วยการตั้งค่าสถานะ 'สำรองข้อมูล' เพื่อให้สามารถลองได้เฉพาะเมื่อเซิร์ฟเวอร์อื่นทั้งหมดออฟไลน์ ( การโหลดบาลานซ์ของ HTTP & gt; น้ำหนักเซิร์ฟเวอร์ )

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