Рейтинг:0

Длительные задержки NGINX при завершении загрузки WebDAV через прокси

флаг nl

У меня есть внутренний сервер IIS, на котором работает WebDAV, который используется непосредственно для загрузки и загрузки файлов из приложения Android.

Мой внутренний DNS разрешает https://webdav.mydomain.com напрямую к IIS (минуя NGINX), и эта внутренняя связь работает без проблем. Скорость загрузки и выгрузки не является фантастической для доступных скоростей беспроводной сети, но это то, к чему я привык в своей конфигурации IIS (будь то из-за ограничений моего оборудования или просто ограничений IIS WebDAV).

Внешний по отношению к сети URL-адрес разрешается в общедоступный IP-адрес моего сервера NGINX. При удаленном использовании приложения скорость загрузки также кажется приемлемой (~25 МБ/с).

Однако скорость загрузки низкая. Они составляют примерно половину скорости загрузки. Однако более важным, чем медлительность, является очень большая задержка в конце загрузки перед ее завершением.

Мой клиент показывает статус загрузки, в котором сообщается количество загружаемых байтов и общий размер загрузки. Когда загрузка достигает около 99% от общего размера загрузки, она просто находится там некоторое время, прежде чем окончательно завершиться.

Для файла размером 50 МБ он остановится примерно на 49 МБ и подождет около 30 секунд перед завершением. Загрузка 3 ГБ ждала не менее 5 минут, прежде чем, наконец, успешно завершилась.

Эта проблема вообще не существует внутри, когда сервер NGINX не задействован. Я согласен с тем, что внешняя пропускная способность будет ниже, и даже ограниченное аппаратное обеспечение NGINX может иметь дополнительное регулирование. Но я не уверен, почему такая большая задержка в том, что NGINX может завершить загрузку на сервер IIS.

Ниже приведена соответствующая конфигурация NGINX:

вверх по течению webdav_backend {
        сервер 10.10.10.102:443;
        поддержка активности 100;
}

сервер {
        слушать 443 ssl http2;

        имя_сервера webdav.mydomain.com;

        proxy_set_header Хост $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 $ схема;
        proxy_set_header X-Forwarded-Protocol $ схема;

        прокси_перенаправление выключено;
        прокси_буферизация выключена;

        proxy_connect_timeout 180 с;
        proxy_send_timeout 180 с;
        proxy_read_timeout 180 с;
        fastcgi_send_timeout 180 с;
        fastcgi_read_timeout 180 с;

        прокси_http_версия 1.1;
        proxy_set_header Соединение "";

        местоположение @прокси {
                прокси_пасс https://webdav_backend;
        }

        место расположения / {
                try_files $uri @proxy;
                client_max_body_size 4G;
        }

        журнал доступа /opt/var/log/nginx/webdav.mydomain.com.remote.log удаленные_хосты if=$remote_hosts;
        журнал_доступа /opt/var/log/nginx/webdav.mydomain.com.access.log;
        error_log /opt/var/log/nginx/webdav.mydomain.com.error.log;
}

Рейтинг:1
флаг nl

Поэтому после публикации я вернулся, чтобы попытаться получить дополнительную информацию.

Я заметил, что во время загрузки мой сервер IIS не получал данные сразу после начала загрузки. Для небольших файлов, таких как мой 50 МБ, казалось, что внутренний сервер не начинал получать данные до тех пор, пока они не были почти завершены, а для больших файлов я заметил большую буферизацию на клиенте, а также периоды бездействия внутреннего сервера, получающего данные. данные.

Я также заметил, что память на моем сервере NGINX (встроенное оборудование с низкими характеристиками) уменьшалась примерно на 70 МБ (осталось 75% доступной памяти) во время передачи.

Все это убедило меня в том, что сервер NGINX все еще каким-то образом кэширует/буферизирует данные, несмотря на то, что в конфигурации указано «proxy_buffering off». Я просмотрел документацию и нашел:

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_request_buffering

Отключение этой функции не только привело к полному устранению задержек, но, похоже, увеличило мою скорость загрузки в целом примерно на 50%.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.