Допустим у вас установлены Artifactory Version 6.3.3 и nginx version: nginx/1.14.0 на CentOS Linux release 7.5.1804
Доступ к Artifactory организован через nginx reverse proxy, то есть в конфигурации сервера nginx есть примерно такой блок:
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
port_in_redirect off;
proxy_set_header X-Real-IP $remote_addr;
}
Репозитарий артифактов настроен, всё отлично работает, пользователи довольны.
Но через какое-то время появляются пара пользователей, которые переодически сообщают о скачивании «битых» архивов или испорченных файлов из Artifactory, при этом у других пользователей теже самые файлы скачиваются без проблем тем же самым браузером
Вы определяете условия повторения скачивания испорченных файлов:
- Пользователь подключен к локальной сети на скорости 100 Mbit
- Пользователь скачивает файл размеров больше 1 Gbyte
- Ваш сервер JFrog Artifactory работает с подключением к сети >= 1 Gbit
Ответ на такое поведение скрывается в описании директивы nginx proxy_max_temp_file_size:
When buffering of responses from the proxied server is enabled, and the whole response does not fit into the buffers set by the proxy_buffer_size and proxy_buffers directives, a part of the response can be saved to a temporary file. This directive sets the maximum
size
of the temporary file. The size of data written to the temporary file at a time is set by the proxy_temp_file_write_size directive
которая по умолчанию установлена ровно в 1024 Mbyte
Поскольку сервер Artifactory отдаёт данные в 10 раз быстрее чем клиент может их забрать, то nginx использует буфер и временный файл для сохранения потока данных. В описанной ситуации, файлы размером более 1 Gb превышают установленное по умолчанию значение.
Чтобы убрать проблему, можно увеличить установленное значение или отключить ограничение вовсе, установив директиву в значение «0»:
proxy_max_temp_file_size 0;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
port_in_redirect off;
proxy_set_header X-Real-IP $remote_addr;
}
Источники и дополнительная информация по теме: