Score:0

ดีบัก Nginx vhost เป็นพร็อกซีย้อนกลับสำหรับ Uvicorn Python API

ธง in

ฉันมี API (ใช้ Python, DRF) ซึ่งทำงานเป็นบริการ Uvicorn บนพอร์ต 8002 บนเซิร์ฟเวอร์ Debian มันทำงานโดยไม่มีปัญหาชัดเจนตั้งแต่เมื่อฉันทำ ขด http://127.0.0.1:8002/videos/ฉันได้รับการตอบสนองของ API ที่คาดไว้ (ฉันยังได้ทดสอบเมื่อใช้งานบน Heroku โดยไม่มีปัญหา)

ฉันต้องการให้บริการต่อสาธารณะด้วย Nginx ดังนั้นฉันจึงกำหนดค่า Nginx vhost ใหม่ให้เป็น reverse proxy ดังนี้:

 ต้นน้ำ my_api {
     เซิร์ฟเวอร์ 127.0.0.1:8002;
 }
 
 เซิร์ฟเวอร์ {
 
     server_name example.com;
 
     ที่ตั้ง / {
         # ผ่านไปยังบริการเว็บเซิร์ฟเวอร์ Uvicorn/Gunicorn
         proxy_pass http://my_api;
         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-Forwarded-Proto $scheme;
     }

}

error_log /home/www/mydomain.log ข้อมูล;

บนเบราว์เซอร์ ฉันได้รับข้อผิดพลาด 400 Bad Request ไม่ว่าจะเป็นการเปิด http://example.com/videos/ หรือแม้กระทั่งบน http://example.com/ หรือ http://example.com/whatever.

เมื่อฉันหาง /home/www/example.log ไฟล์บันทึกของ Nginx vhost ฉันไม่ได้รับข้อมูลที่เกี่ยวข้องหรือบันทึกจาก vhost อื่น ๆ ดังต่อไปนี้:

2021/07/09 12:05:49 [ข้อมูล] 24698#24698: *233765 ลูกค้า 55.36.148.206 ปิดการเชื่อมต่อ Keepalive
2021/07/09 12:06:12 [ข้อมูล] 24698#24698: *233772 ลูกค้า 217.244.66.202 ปิดการเชื่อมต่อ Keepalive
2021/07/09 12:06:13 [ข้อมูล] 24698#24698: *233775 ไคลเอนต์ปิดการเชื่อมต่อขณะรอคำขอ ไคลเอ็นต์: 63.210.40.102 เซิร์ฟเวอร์: 0.0.0.0:80

(หมายเหตุ: endpoint เฉพาะใช้งานได้กับ /วิดีโอ/ เส้นทาง แต่ไม่ใช่สำหรับ /วิดีโอ เส้นทาง - สิ่งนี้จะได้รับการแก้ไขในภายหลัง แต่อย่างไรก็ตามไม่ควรรบกวนคำถาม)

มีความคิดใดที่จะแก้ไขข้อบกพร่อง / ทำความเข้าใจว่าข้อผิดพลาด 400 นี้มาจากไหน

Michael Hampton avatar
cz flag
ตรวจสอบบันทึกการใช้งานของคุณ
in flag
ไม่ /home/www/example.log ตามที่กำหนดค่าใน vhost แทนที่บันทึกแอปพลิเคชันหรือไม่
Michael Hampton avatar
cz flag
ไม่ควรหวัง! คุณจะสามารถดีบักแอปพลิเคชันของคุณได้อย่างไรหากคุณไม่ได้เข้าสู่ระบบ
in flag
คำถามของฉันเกี่ยวกับการเข้าสู่ระบบ ตามที่ระบุไว้ ฉันได้กำหนดค่า vhost เพื่อเข้าสู่ /home/www/example.log แต่ไม่มีอะไรปรากฏในบันทึกเกี่ยวกับ 400 ฉันไม่แน่ใจว่าฉันเข้าใจประเด็นของคุณ
Michael Hampton avatar
cz flag
ดูเหมือนว่าคุณจะสับสนระหว่างบันทึก nginx กับบันทึกของแอปพลิเคชันของคุณ สิ่งเหล่านี้แยกจากกันและแตกต่าง
in flag
ขออภัย ฉันคิดว่าคุณกำลังอ้างถึงบันทึกแอป Nginx อื่น ไม่ใช่แอป API ของฉันที่ให้บริการโดย Uvicorn ก๊อตชา. จริง ๆ แล้วฉันสันนิษฐานว่าข้อผิดพลาดไม่ได้มาจากแอปพลิเคชัน เนื่องจากฉันสามารถม้วนงอได้สำเร็จ และเนื่องจากฉัน (คิดผิด) โดยสมมติว่า Nginx สร้างขึ้น 400 วินาที แต่คุณพูดถูก ข้อผิดพลาดอยู่ที่ฝั่งของแอป ขอบคุณ
Score:0
ธง in

ขอบคุณคำพูดของ Michael Hampton ปรากฏว่าข้อผิดพลาด 400 ไม่ได้อยู่ที่ฝั่งของ Nginx แต่อยู่ที่ฝั่งของแอป Python ที่ Gunicorn/Uvicorn ให้บริการ แม้ว่า curl จะทำงานอยู่ในเครื่องก็ตาม

ดังนั้นจึงจำเป็นต้องแสดงบันทึกของ Gunicorn เพื่อดีบัก โดยเปิดใช้ด้วยตนเองโดยเปิดบันทึกดีบั๊กด้วยวิธีนี้:

gunicorn -k uvicorn.workers.UvicornWorker --bind "0.0.0.0:8002" -- ดีบักระดับบันทึก my_api.asgi:application

โพสต์คำตอบ

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