Re: выдает файл прежнего размера

Maxim Dounin mdounin на mdounin.ru
Пт Окт 22 20:02:51 MSD 2010


Hello!

On Fri, Oct 22, 2010 at 10:35:14AM -0400, dmtr wrote:

> nginx работает в следующей конфигурации:
> осуществляет проксирование, back-end
> установлен apache
> nginx сам выдает контекст без участия apache
> некоторые файлы, в том числе [b]css[/b], на
> примере которого я и описываю проблему
> 
> в течение какого-то времени после
> изменения файла, nginx отдает его со
> статусом 200, но такого же размера,
> какого файл был до изменения. в
> результате клиент получает неполный
> файл.
> 
> для наглядности привожу часть access_log.
> размер отдаваемого файла до изменения:
> [code]
> [22/Oct/2010:18:11:19 +0400] GET /includes/mymc.css HTTP/1.0 "200"
> [b]10399[/b] "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru;
> rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10" "unknown"
> [/code]
> 
> в файл добавлены строки, размер
> увеличился
> [code]
> # ls -l mymc.css
> -rw-rw----+ 1 fc-ros932  fc-ros932  [b]10982[/b] Oct 22 18:11 mymc.css
> [/code]
> 
> в течение какого-то времени (около
> минуты), nginx отдает этот файл со
> статусом 200, но размер файла прежний. он
> реально отдает измененный файл, в нем
> есть изменения, но нет нескольких
> последних строк.
> [code]
> [22/Oct/2010:18:11:45 +0400] GET /includes/mymc.css HTTP/1.0 "200"
> [b]10399[/b] "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru;
> rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10" "unknown"
> [22/Oct/2010:18:11:53 +0400] GET /includes/mymc.css HTTP/1.0 "200"
> [b]10399[/b] "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru;
> rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10" "unknown"
> [22/Oct/2010:18:13:04 +0400] GET /includes/mymc.css HTTP/1.0 "200"
> [b]10982[/b] "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru;
> rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10" "unknown"
> [/code]
> 
> [code]# nginx -v
> nginx version: nginx/0.8.52[/code]
> 
> подскажите, какими параметрами
> конфигурации может быть это вызвано?
> что еще показать?
> сервер изначально настраивал не я, пока
> только разбираюсь в конфигурации.

Файлы надо обновлять атомарно.  Т.е. сначала создать новый файл, а 
потом rename() (или mv, если из shell'а).  Тогда не будет проблем 
вида "содержимое новое, а размер всё ещё старый", а равно и 
множества других проблем, связанных с неатомарностью обновления.

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

Maxim Dounin



Подробная информация о списке рассылки nginx-ru