nginx в actix-web используя библиотеку actix-multipart. Локальная сеть, в nginx выставляен таймаут в 20 минут, всем участникам выставлен максимальный размер файла в 100гб. Почему-то запрос падает с ошибкой 504 timeout. Actix пишет в лог загадочный "Error in response: Incomplete". Где вообще искать проблему?
А в логах nginx что?
Если убрать всякий мусор, то такое 2023/09/05 12:08:50 [debug] 184974#184974: *1 http run request: "/url" 2023/09/05 12:08:50 [debug] 184974#184974: *1 http upstream check client, write event:1, "/url" 2023/09/05 12:08:50 [debug] 184974#184974: *1 http upstream request: "//url" 2023/09/05 12:08:50 [debug] 184974#184974: *1 http upstream send request handler 2023/09/05 12:08:50 [debug] 184974#184974: *1 http upstream send request 2023/09/05 12:08:50 [debug] 184974#184974: *1 http upstream send request body 2023/09/05 12:08:50 [debug] 184974#184974: *1 tcp_nopush 2023/09/05 12:08:50 [debug] 184974#184974: *1 writev: 693 of 693 2023/09/05 12:08:50 [debug] 184974#184974: *1 sendfile: @0 2147479552 2023/09/05 12:08:50 [debug] 184974#184974: *1 sendfile: 2147479552 of 2147479552 @0 2023/09/05 12:29:00 [debug] 184974#184974: *1 http upstream request: "/url" 2023/09/05 12:29:00 [debug] 184974#184974: *1 http upstream send request handler 2023/09/05 12:29:00 [debug] 184974#184974: *1 http next upstream, 4 2023/09/05 12:29:00 [debug] 184974#184974: *1 free rr peer 1 4 2023/09/05 12:29:00 [error] 184974#184974: *1 upstream timed out (110: Unknown error) while sending request to upstream, client: 192.168.123.127, server: _, request: "POST /url", host: "192.168.9.252", referrer: "http://192.168.9.252/ui/map" 2023/09/05 12:29:00 [debug] 184974#184974: *1 finalize http upstream request: 504 2023/09/05 12:29:00 [debug] 184974#184974: *1 finalize http proxy request 2023/09/05 12:29:00 [debug] 184974#184974: *1 close http upstream connection: 17 2023/09/05 12:29:00 [debug] 184974#184974: *1 http finalize request: 504, "/url" a:1, c:1 2023/09/05 12:29:00 [debug] 184974#184974: *1 http special response: 504, "/url" 2023/09/05 12:29:00 [debug] 184974#184974: *1 HTTP/1.1 504 Gateway Time-out^M
А у Актикса есть свой таймаут?
Я хз. Гуглил, ничего не нашёл. Есть какой-то keep-alive, но немного непохоже на таймаут, щас разбираюсь
Keep-Alive Actix Web keeps connections open to wait for subsequent requests. keep alive connection behavior is defined by server settings. Duration::from_secs(75) or KeepAlive::Timeout(75): enables 75 second keep-alive timer. KeepAlive::Os: uses OS keep-alive. None or KeepAlive::Disabled: disables keep-alive. Есть что-то такое. Но я не понимаю, что это
Скорее всего в nginx / таймауте
Wireshark-ом запишите трафик
Это для сценариев, когда ты много запросов шлёшь, чтобы заново TCP подключения на каждый запрос не создавать
location /url { client_max_body_size 100000M; proxy_read_timeout 20m; proxy_connect_timeout 20m; proxy_send_timeout 20m; proxy_set_header Host $host; proxy_pass http://127.0.0.1:10001; }
звучит страшно
сервер дропает коннекшн видимо
Я копался вчера целый день, в итоге понял, что это nginx чёто мутит, пошёл в чат по nginx, там предложили попробовать отключить proxy_request_buffering (он включен по умолчанию), и всё заработало. Проблема была в том, что пока nginx ждал весь файл, чтобы забуферить его, срабатывал таймаут
Обсуждают сегодня