ฉันมี 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 นี้มาจากไหน