Opened 7 years ago
Closed 7 years ago
#1394 closed defect (invalid)
nginx отдает мусор в первые секунды после заливки статического файла
Reported by: | 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"
Это естественный результат неатомарного обновления файлов, подробнее тут.