Score:0

รับข้อผิดพลาดการหมดเวลาด้วยแอปพลิเคชัน nginx+gunicorn บนบริการแอป Azure

ธง id

พวกฉันต้องการความช่วยเหลือเกี่ยวกับการกำหนดค่า NGINX ของฉัน ตอนนี้แอปพลิเคชัน Django โฮสต์อยู่ที่บริการ Azure App และการไปที่ Gunicorn โดยตรงก็ใช้งานได้ดี แต่เมื่อฉันไปที่ NGINX ฉันเริ่มได้รับข้อผิดพลาดเช่นนี้:

ฉันได้พยายามเพิ่มเวลาการหมดเวลา แต่ข้อผิดพลาดเกิดขึ้นเป็นระยะ ๆ ในจุดสิ้นสุดที่แตกต่างกัน และจุดสิ้นสุดทำงานได้ดีเมื่อฉันไม่ได้ใช้ NGINX แต่ใช้ gunicorn ดังนั้นฉันเดาว่ามันต้องทำอะไรบางอย่างกับ NGINX set- ขึ้น.


    2022-01-26T10:22:03.479463450Z nginx | 26/2022/01 10:22:03 [ข้อมูล] 29#29: *2245 epoll_wait() รายงานว่าไคลเอนต์ปิดการเชื่อมต่อก่อนเวลาอันควร ดังนั้นการเชื่อมต่ออัปสตรีมจึงถูกปิดไปด้วยในขณะที่ส่งคำขอไปยังอัปสตรีม ไคลเอ็นต์: 169.254.130.1 เซิร์ฟเวอร์: xxxxx .com, คำขอ: "GET /api/v1/office-hours/ HTTP/1.1", อัปสตรีม: "http://127.0.0.1:8000/api/v1/office-hours/", โฮสต์: "xxxxx.com ", ผู้อ้างอิง: "https://xxxx.vercel.app/"
    2022-01-26T10:22:03.514362267Z nginx | 169.254.130.1 - - [26/Jan/2022:10:22:03 +0000] "GET /api/v1/office-hours/ HTTP/1.1" 499 0 "https://xxxx.vercel.app/" " Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML เช่น Gecko) Chrome/97.0.4692.99 Safari/537.36"
     
    2022-01-26T10:23:03.513182059Z nginx | 26/01/2020 10:23:02 [ข้อมูล] 29#29: *2247 epoll_wait() รายงานว่าไคลเอ็นต์ปิดการเชื่อมต่อก่อนเวลาอันควร ดังนั้นการเชื่อมต่ออัปสตรีมจึงถูกปิดไปด้วยในขณะที่ส่งคำขอไปยังอัปสตรีม ไคลเอ็นต์: 169.254.130.1 เซิร์ฟเวอร์: xxxxx .com, คำขอ: "GET /api/v1/office-hours/ HTTP/1.1", อัปสตรีม: "http://127.0.0.1:8000/api/v1/office-hours/", โฮสต์: "xxxxx.com ", ผู้อ้างอิง: "https://xxxx.vercel.app/"
    2022-01-26T10:23:03.513238060Z nginx | 169.254.130.1 - - [26/Jan/2022:10:23:02 +0000] "GET /api/v1/office-hours/ HTTP/1.1" 499 0 "https://xxxx.vercel.app/" " Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML เช่น Gecko) Chrome/97.0.4692.99 Safari/537.36" 

เว็บ | [2022-01-25 17:21:07 +0000] [15] [สำคัญ] การหมดเวลาของคนงาน (pid:32)
2022-01-25T17:21:07.490138324Z เว็บ | 2022-01-25 18:21:07,487 [32mINFO [31mglogging [33mWorker exiting (pid: 32) [34mgunicorn.error.info:264[0m
2022-01-25T17:21:07.490220225Z nginx | 2022/01/25 17:21:07 [ข้อผิดพลาด] 25#25: *930 อัปสตรีมปิดการเชื่อมต่อก่อนกำหนดขณะอ่านส่วนหัวการตอบสนองจากอัปสตรีม ไคลเอ็นต์: 169.254.130.1 เซิร์ฟเวอร์: xxxx.com คำขอ: "GET /api/v1 /cms/content/ HTTP/1.1", อัปสตรีม: "http://127.0.0.1:8000/api/v1/cms/content/", โฮสต์: "xxxx.com"
2022-01-25T17:21:07.490875232Z nginx | 169.254.130.1 - - [25/ม.ค./2022:17:21:07 +0000] "GET /api/v1/cms/content/ HTTP/1.1" 502 158 "-" "axios/0.18.1"
2022-01-25T17:21:07.490892833Z nginx | 2022/01/25 17:21:07 [ข้อมูล] 25#25: *930 ไคลเอ็นต์ 169.254.130.1 ปิดการเชื่อมต่อ Keepalive
2022-01-25T17:21:08.673367528Z เว็บ | [2022-01-25 17:21:08 +0000] [15] [คำเตือน] พนักงานที่มี pid 32 ถูกยกเลิกเนื่องจากสัญญาณ 9
2022-01-25T17:21:08.679932505Z เว็บ | [2022-01-25 17:21:08 +0000] [43] [INFO] กำลังบูตพนักงานด้วย pid: 43

นี่คือ nginx.conf ของฉัน

#ผู้ใช้ nginx;
ผู้ปฏิบัติงาน_กระบวนการ 2; # ตั้งค่าเป็นจำนวนแกน CPU 2 แกนภายใต้แผน Azure P1v3

error_log /var/log/nginx/error.log ดีบัก;
pid /var/run/nginx.pid;


เหตุการณ์ {
    worker_connections 1024;
}


http {
    รวม /etc/nginx/mime.types;
    แอปพลิเคชัน default_type/octet-stream;

    log_format main '$remote_addr - $remote_user [$time_local] "$request"'
                      '$สถานะ $body_bytes_sent "$http_referer"'
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/nginx/access.log หลัก;

    ส่งไฟล์บน;
    #tcp_nopush บน;

    keepalive_timeout 65;

    #gzip บน;

    รวม /etc/nginx/conf.d/*.conf;
}

นี่คือ default.conf ของฉัน

เซิร์ฟเวอร์ {
ฟัง 80 default_server;

ข้อมูล error_log /dev/stdout;
access_log /dev/stdout;

client_max_body_size 100M;


ตำแหน่ง / คงที่ {
    รูท /var/app/ui/build;
}

สถานที่ / ไซต์คงที่ {
    ราก /var;
}

สถานที่ / สื่อ {
    ราก /var;
}

ที่ตั้ง / {
    รูท /var/app/ui/build; # ลอง react สร้างไดเร็กทอรีก่อน หากไม่มีไฟล์ ให้ส่งคำขอเส้นทางไปยังแอป django
    try_files $uri $uri/index.html $uri.html @app;
}

ตำแหน่ง @app {
    proxy_set_header โฮสต์ $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
    proxy_set_header X-ส่งต่อโปรโต "https"; # ถือว่า https ถูกยกเลิกโดยโหลดบาลานเซอร์ต่อหน้าเราแล้ว

    proxy_pass http://127.0.0.1:8000;
    proxy_read_timeout 300;
    ปิด proxy_buffering;
}

}

Score:1
ธง us

คุณต้องดีบักแอปพลิเคชันของคุณ เหตุใดจึงใช้เวลานานมากในการตอบสนอง

มีความล่าช้าหนึ่งนาทีระหว่าง nginx ที่ส่งคำขออัปสตรีมและ nginx หยุดรอการตอบกลับ

nginx สามารถเชื่อมต่อกับแอปพลิเคชันอัพสตรีมผ่าน TCP มันสามารถส่งคำขอ HTTP อย่างไรก็ตาม แอปพลิเคชันจะไม่ส่งการตอบสนองก่อนที่ nginx จะหมดเวลา

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา