Вопрос или проблема
У меня проблема с загрузкой на моем сайте через прокси Nginx. Сайт размещен на сервере Windows Server 2016 Datacenter в IIS. Когда происходит проблема с загрузкой, я сталкиваюсь с такой ситуацией: например, изображение не загружается, и в консоли Firefox появляется ошибка “NS_ERROR_NET_PARTIAL_TRANSFER”. Это также может случиться и с другими файлами, такими как main.js. Проблема возникает только при использовании сервера Nginx вместе с Windows Server 2016 Datacenter. Но когда я захожу на сайт напрямую по IP-адресу, эта проблема исчезает, и все работает как ожидалось.
Я пробовал использовать разные настройки Nginx, но ничего не помогло (также не ухудшало и не улучшало ситуацию). Единственное, что мне удалось выяснить, это то, что когда я размещаю сайт на машине с Windows 10 также в IIS (виртуальная машина на Windows Server 2016 Datacenter), проблема не возникает. Я также пробовал разные версии и редакции Windows Server, такие как: Windows Server 2019 и 2022. Обе версии я пробовал в стандартной и центровой редакции. Я отключил на Windows Server 2016 Datacenter брандмауэр и Windows Defender, и в IIS любые ограничения, которые смог найти. Но на виртуальной машине с Windows 10 это все не было необходимо.
Распространенные причины и решения:
-
Размер буфера тела клиента
Если размер файла превышает размер буфера, выделенного Nginx, это может вызвать проблемы с частичной передачей. Увеличьте размер буфера с помощью этих настроек в http (nano /etc/nginx/nginx.conf) или серверном блочном (nano /etc/nginx/sites-available/default) конфигурации Nginx:
client_body_buffer_size 16K; # Увеличьте размер буфера (регулируйте по необходимости) client_max_body_size 20M; # Установите максимальный размер тела (регулируйте по необходимости)
-
Буферизация прокси
Если вы используете Nginx в качестве обратного прокси и буферизация прокси неправильно настроена, это может вызвать неполные передачи файлов.
Добавьте это в вашу конфигурацию прокси, чтобы отключить буферизацию прокси:
location / { #..... # Отключите буферизацию прокси proxy_buffering off; proxy_request_buffering off; #..... }
-
Тайм-ауты
Большие файлы могут передаваться дольше, поэтому важно соответственно настроить ваши параметры тайм-аута:
proxy_connect_timeout 1200s; proxy_read_timeout 1200s; proxy_send_timeout 1200s;
Ответ или решение
Проблема частичного переноса при использовании Nginx в качестве прокси
Ваша проблема с загрузкой файлов на сайте через прокси-сервер Nginx может быть связана с несколькими факторами, связанными как с конфигурацией Nginx, так и с настройками Windows Server и IIS. Ошибка NS_ERROR_NET_PARTIAL_TRANSFER
, которую вы наблюдаете, указывает на то, что браузер не смог загрузить файл полностью, что может быть вызвано неправильной обработкой запросов на уровне сервера.
Анализ проблемы
Поскольку вы отметили, что проблема возникает только при использовании Nginx в качестве обратного прокси, но не наблюдается при прямом доступе через IP-адрес, можно предположить, что проблема заключается в конфигурации Nginx или в несовместимостях при взаимодействии между Nginx и IIS на Windows Server 2016.
Возможные причины и решения
-
Настройки буфера тела клиента
Если объем передаваемых данных превышает настройки буфера, это может привести к ошибке частичного переноса. Попробуйте увеличить размеры буфера в конфигурации Nginx. Откройте файл/etc/nginx/nginx.conf
или конфигурацию вашего окружения, и добавьте следующие строки:client_body_buffer_size 16K; # Увеличьте размер буфера по необходимости client_max_body_size 20M; # Установите максимальный размер тела по необходимости
-
Настройки буферизации прокси
Неправильная настройка буферизации при использовании Nginx как обратного прокси может привести к неполным переносам файлов. Добавьте в блок конфигурации прокси следующие параметры, чтобы отключить буферизацию:location / { #..... proxy_buffering off; proxy_request_buffering off; #..... }
-
Таймауты
Для передачи больших файлов может потребоваться больше времени, поэтому рекомендуется настроить параметры таймаутов. Добавьте следующее в конфигурацию вашего Nginx:proxy_connect_timeout 1200s; proxy_read_timeout 1200s; proxy_send_timeout 1200s;
-
Неправильная конфигурация IIS
Проверьте настройки вашего IIS на Windows Server 2016. Убедитесь, что нет ограничений на размер загружаемых файлов или проблем с аутентификацией, которые могут препятствовать нормальной обработке запросов от Nginx. -
Обновление Nginx и Windows Server
Убедитесь, что вы используете последние версии Nginx и Windows Server. Иногда устаревшие версии могут иметь известные ошибки или несовместимости.
Заключение
Для устранения проблемы частичного переноса файлов через Nginx, важно внимательно проверить и перепроверить все настройки, начиная от конфигурации Nginx и заканчивая IIS. Увеличение размеров буфера, корректное настроивание параметров таймаутов и отключение буферизации прокси — это шаги, которые существенно могут повлиять на стабилизацию работы вашего веб-сервера. Если проблема сохраняется даже после внесения этих изменений, рекомендуется изучить логи Nginx и IIS для выявления более точных ошибок и их причин.