rust/actix-web. Был на localhost:10001, по ходу поиска проблемы переместился на 0.0.0.0:10001. Ну и nginx, как прокси между этим всем.
Пытаюсь между фронтендом и бекендом гонять файлы в формате multipart/form-data. Просто XMLHttpRequest, и рисую прогресс бар.
Если размер файла превышает несколько гигабайт, то запрос сперва зависает надолго, потом падает с ошибкой 504 timeout.
Попробовал через Insomnia. По ходу экспериментов выяснил, что прямой запрос к api на порт :10001 не падает, но если делать через nginx, то падает.
Вот конфиг:
server {
listen 80;
server_name _;
root /var/xapi/;
access_log /var/xapi/access.log;
error_log /var/xapi/error.log debug;
client_max_body_size 100000M;
location /favicon.ico {
}
location /xapi {
client_max_body_size 100000M;
proxy_read_timeout 5m;
proxy_connect_timeout 5m;
proxy_send_timeout 5m;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:10001;
}
location /ui {
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:10010;
}
}
В чём проблема?
Что говорит на этот счёт лог ошибок?
Если убрать всякий мусор, то такое 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, "/xapi" 2023/09/05 12:08:50 [debug] 184974#184974: *1 http upstream request: "//xapi" 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: "/xapi" 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 /xapi", 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
а вот actix-web говорит, что файл Incomplete
Ну судя по логам апстрим перестал отвечать.
1. что в логах? 2. backend убери обратно на 127.0.0.1 - нечего его наружу светить 3. proxy_connect_timeout 5m - это какая-то наркомания 4. посмотри через tcpdump на каком шаге соединение ломается
не надо сюда портянок логов, есть pastebin.com
3. Почему наркомания? Я, кстати, это добавил, потому что написано, что дефолтный таймаут у nginx это 30 секунд. За это время 5 гб не перекачаются
https://pastebin.pl/view/0ac1b785
А API утверждает, что файл от nginx пришёл неполный. И мимо nginx работает нормально
5 минут на подключение к upstream-у? там и секунда - много
выстави ещё proxy_request_buffering off;
Убрал proxy_connect_timeout, добавил proxy_request_buffering off; и всё заработало. Спасибо большое. В чём, интересно, была проблема? Для меня это больше похоже на какой-то рандом
Почему файлы в 1-2 гигабайта проходили, а >4 гб - нет? Даже на 1 гигабайте буфер должен был тыщщу раз заполниться и освободиться, нет разве?
убирать не надо, поставь разумное значение, а то сейчас оно у тебя по-умолчанию стало, 60 секунд
Апстрим это то, куда nginx проксирует?
Обсуждают сегодня