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