Điểm:0

Gỡ lỗi vhost Nginx làm proxy ngược cho API Uvicorn Python

lá cờ in

Tôi có API (Python, dựa trên DRF), chạy dưới dạng dịch vụ Uvicorn trên cổng 8002 trên máy chủ Debian. Nó chạy không có vấn đề rõ ràng, kể từ khi tôi làm cuộn tròn http://127.0.0.1:8002/videos/, tôi nhận được phản hồi API dự kiến ​​(tôi cũng đã kiểm tra nó khi được triển khai trên Heroku mà không gặp vấn đề gì).

Tôi cần phân phối nó công khai với Nginx, vì vậy tôi đã định cấu hình một vhost Nginx mới làm proxy ngược như sau:

 ngược dòng my_api {
     máy chủ 127.0.0.1:8002;
 }
 
 người phục vụ {
 
     server_name example.com;
 
     địa điểm / {
         # Chuyển đến dịch vụ máy chủ web Uvicorn/Gunicorn
         proxy_pass http://my_api;
         proxy_set_header Máy chủ lưu trữ $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-Forwarded-Proto $scheme;
     }

}

thông tin error_log /home/www/mydomain.log;

Trên trình duyệt, tôi gặp lỗi 400 Yêu cầu không hợp lệ, cho dù đó là trên http://example.com/videos/ hoặc thậm chí trên http://example.com/ hoặc http://example.com/whatever.

Khi tôi nối đuôi /home/www/example.log Nginx vhost, tôi không nhận được bất kỳ thông tin thích hợp nào hoặc nhật ký từ các vhost khác, như sau:

2021/07/09 12:05:49 [thông tin] 24698#24698: *233765 client 55.36.148.206 đã đóng kết nối cố định
2021/07/09 12:06:12 [thông tin] 24698#24698: *233772 client 217.244.66.202 đã đóng kết nối cố định
2021/07/09 12:06:13 [thông tin] 24698#24698: *233775 máy khách đã đóng kết nối trong khi chờ yêu cầu, máy khách: 63.210.40.102, máy chủ: 0.0.0.0:80

(Lưu ý: điểm cuối duy nhất hoạt động cho /video/ tuyến đường nhưng không dành cho /video lộ trình - điều này sẽ được khắc phục sau nhưng dù sao thì điều đó cũng không ảnh hưởng đến câu hỏi.)

Bạn có biết cách gỡ lỗi/hiểu lỗi 400 này đến từ đâu không?

Michael Hampton avatar
lá cờ cz
Kiểm tra nhật ký ứng dụng của bạn.
lá cờ in
/home/www/example.log không được định cấu hình trong vhost, có thay thế nhật ký ứng dụng không?
Michael Hampton avatar
lá cờ cz
Bạn nên hy vọng là không! Làm cách nào khác để bạn có thể gỡ lỗi ứng dụng của mình nếu bạn không đăng nhập?
lá cờ in
Câu hỏi của tôi chính xác là về đăng nhập. Như đã nêu, tôi đã định cấu hình vhost để đăng nhập vào /home/www/example.log, nhưng không có gì xuất hiện trong nhật ký về 400. Tôi không chắc mình hiểu quan điểm của bạn
Michael Hampton avatar
lá cờ cz
Có vẻ như bạn đang nhầm lẫn nhật ký nginx với nhật ký ứng dụng của mình. Đây là riêng biệt và khác biệt.
lá cờ in
Ồ, xin lỗi, tôi nghĩ bạn đang đề cập đến nhật ký ứng dụng Nginx khác, không phải ứng dụng API của tôi do Uvicorn cung cấp. hiểu rồi. Vì vậy, thực sự tôi đã cho rằng lỗi không đến từ ứng dụng, vì tôi có thể cuộn nó thành công và vì tôi (sai) cho rằng 400 giây được tạo bởi Nginx, nhưng bạn đã đúng, lỗi nằm ở phía ứng dụng. Cảm ơn
Điểm:0
lá cờ in

Nhờ nhận xét của Michael Hampton, có vẻ như 400 lỗi không nằm ở phía Nginx mà nằm ở phía ứng dụng Python do Gunicorn/Uvicorn cung cấp, mặc dù curl đang hoạt động cục bộ.

Vì vậy, nó chỉ cần hiển thị nhật ký Gunicorn để gỡ lỗi, bằng cách khởi chạy thủ công với nhật ký gỡ lỗi, theo cách này:

gunicorn -k uvicorn.workers.UvicornWorker --bind "0.0.0.0:8002" --log-level debug my_api.asgi:application

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.