Opened 2 years ago

Closed 2 years ago

#1394 closed defect (invalid)

nginx отдает мусор в первые секунды после заливки статического файла

Reported by: neomag@… Owned by:
Priority: minor Milestone:
Component: other Version: 1.12.x
Keywords: Cc:
uname -a: Linux 1ng 4.4.0-93-generic #116-Ubuntu SMP Fri Aug 11 21:17:51 UTC 20 17 x86_64 x86_64 x86_64 GNU/Linux
nginx -V: nginx version: nginx/1.12.1

Description

При изменении static файла nginx отдает мусор несколько секунд

имеем тривиальный location:

location ~ \.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js|ico|swf|xml|mp3|html|svg)$
{
root /var/www;
etag on;
}

меняю текстовый файл, расположенный в в данном location
и наблюдаю следующую картину:

по http заголовкам видно, что первые 5-15 секунд скачет вперед-назад во времени заголовок "Last-Modified"
и "Content-length" и "Etag"

как будто nginx отдает разные файлы, через несколько секунд это прекращается и nginx отдает корректный файл,
с правильным содержимым

проверял в real time следующим образом:

с соседнего хоста каждые 0.5 секунды выводил результат прямого коннекта на порт:

nc testserver 80 < in.txt

in.txt:
GET /test.txt HTTP/1.1
HOST: blablahost


при 300-500 rps клиенты успевают нахватать некорректных js/css файлов, что ломает отображение сайта во время деплоя

для наглядности записал минутную gif'ку

https://drive.google.com/open?id=0B7WRF7P_dq4gcFEyTWljNElfeGs

обратите внимание как скачет "Content-length" и "Etag"

Change History (1)

comment:1 by Maxim Dounin, 2 years ago

Resolution: invalid
Status: newclosed

Это естественный результат неатомарного обновления файлов, подробнее тут.

Note: See TracTickets for help on using tickets.