พร็อกซี nginx ลองอีกครั้งขณะที่แบ็กเอนด์กำลังเริ่มต้นใหม่


16

Nginx ส่งคืน 502 ขณะที่แบ็คเอนด์กำลังเริ่มต้นใหม่ ฉันจะทำให้พร็อกซี nginx ลองอีกครั้ง N ครั้งด้วยการหน่วงเวลา M วินาทีได้อย่างไร มีปลั๊กอินหรืออย่างอื่นหรือไม่?

คำตอบ:


5

ฉันพบว่า Nginx ใช้เวลาประมาณ 2 วินาทีในการพยายามหมดเวลาหากคุณระบุอินสแตนซ์ของแบ็กเอนด์เดียวกันหลายร้อยรายการ:

    server  localhost:8080 max_fails=0;
    server  localhost:8080 max_fails=0;
    server  localhost:8080 max_fails=0;
    server  localhost:8080 max_fails=0;

(.... เอ้อทำซ้ำตามต้องการ!)

ใช่แล้วกากตะกอนน่ากลัว - แต่มันเพิ่มระดับความดื้อรั้น ...

ยิ่งไปกว่านั้นคุณสามารถใช้:

    server  localhost:8080 max_fails=0;     
    server  localhost:80 backup;        

สมมติว่า Nginx ทำงานบนพอร์ต 80 นี่จะพยายามวนลูปคำขออย่างต่อเนื่องรอบ ๆ Nginx จนกระทั่ง localhost: 8080 ตอบกลับ นั่นคือลองอีกครั้งจำนวนอนันต์ (?) ครั้งที่มีความล่าช้าเป็นศูนย์วินาที

ฉันจะกลับไปที่เซลล์บุนวมของฉันตอนนี้ ....


วิธีที่สองจะไม่ส่งผลให้เกิดวนซ้ำและเกิดความผิดพลาดของเซิร์ฟเวอร์หรือไม่
Seun Osewa

@SununOsewa ส่วนใหญ่ขึ้นอยู่กับว่าต้องใช้เวลานานแค่ไหนสำหรับแบ็กเอนด์ที่จะตอบสนอง แต่ใช่ว่ามันจะล้นในบางจุด
Oli

2

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

server {
    listen 8502;
    location / {
        #25 seconds sleep
        content_by_lua_block {
             ngx.sleep(25); 
             ngx.exit(ngx.HTTP_BAD_GATEWAY);
        }
    }
}

จากนั้นในรายการอัพสตรีมของคุณคุณต้องเพิ่มเซิร์ฟเวอร์ด้านบนเพื่อสำรองข้อมูลเพื่อเก็บไคลเอ็นต์

upstream backend {
    server 127.0.0.1:3001 fail_timeout=2s; #The backend
    server 127.0.0.1:8502 backup; #Lua holding server in the event backend is restarting
}

และควรรวมอยู่ในข้อมูลจำเพาะสถานที่พร็อกซีของคุณ:

proxy_read_timeout         30;  #Value must be higher than sleep in Lua
proxy_next_upstream error timeout http_502 http_504;

ในการติดตั้งluaโมดูลเป็น nginx บน ubuntu 17.04 ให้รัน:sudo apt-get install libnginx-mod-http-lua
Eugene Mala

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