#139 closed defect (invalid)
pread() read only
Reported by: | Disarmer Mk | Owned by: | somebody |
---|---|---|---|
Priority: | minor | Milestone: | |
Component: | nginx-core | Version: | 1.0.x |
Keywords: | pread, static html | Cc: | |
uname -a: | Linux desktop 3.2.13-1-ARCH #1 SMP PREEMPT Sat Mar 24 09:10:39 CET 2012 x86_64 AMD Athlon(tm) II X4 630 Processor AuthenticAMD GNU/Linux | ||
nginx -V: |
nginx version: nginx/1.0.14
TLS SNI support enabled configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --http-client-body-temp-path=/var/spool/nginx/client_body_temp --http-proxy-temp-path=/var/spool/nginx/proxy_temp --http-fastcgi-temp-path=/var/spool/nginx/fastcgi_temp --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --user=http --group=http --with-imap --with-imap_ssl_module --with-http_ssl_module --with-http_stub_status_module --with-http_dav_module --with-http_gzip_static_module --with-ipv6 --add-module=/usr/lib/passenger/ext/nginx --http-scgi-temp-path=/var/spool/nginx --http-uwsgi-temp-path=/var/spool/nginx |
Description
после изменения статической html страницы при запросе её в браузере появляется надпись "Соединение закрыто удалённым сервером"
кеширование для html страниц включено, фрагмент конфига:
open_file_cache max=1000 inactive=300s;
open_file_cache_valid 360s;
open_file_cache_min_uses 2;
open_file_cache_errors off;
expires 30d;
add_header Vary "Accept-Encoding";
очевидно это происходит из за кеширования. Баг ли это?
в error.log появляется несколько сообщений вида:
2012/03/30 18:00:41 [alert] 785#0: *1076 pread() read only 5891 of 5904 from "/var/www/work/cash/out/index.html" while sending response to client, client: 127.0.0.1, server: , request: "GET /work/cash/out/index%2Ehtml HTTP/1.1", host: "127.0.0.1"
в access.log:
127.0.0.1 - - [30/Mar/2012:18:20:54 +0400] "GET /work/cash/out/index%2Ehtml HTTP/1.1" 200 0 "-" "Opera/9.80 (X11; Linux x86_64; U; ru) Presto/2.10.229 Version/11.62"
127.0.0.1 - - [30/Mar/2012:18:20:54 +0400] "GET /work/cash/out/index%2Ehtml HTTP/1.1" 200 0 "-" "Opera/9.80 (X11; Linux x86_64; U; ru) Presto/2.10.229 Version/11.62"
127.0.0.1 - - [30/Mar/2012:18:20:54 +0400] "GET /work/cash/out/index%2Ehtml HTTP/1.1" 200 0 "-" "Opera/9.80 (X11; Linux x86_64; U; ru) Presto/2.10.229 Version/11.62"
127.0.0.1 - - [30/Mar/2012:18:20:54 +0400] "GET /work/cash/out/index%2Ehtml HTTP/1.1" 200 0 "-" "Opera/9.80 (X11; Linux x86_64; U; ru) Presto/2.10.229 Version/11.62"
127.0.0.1 - - [30/Mar/2012:18:20:54 +0400] "GET /work/cash/out/index%2Ehtml HTTP/1.1" 200 0 "-" "Opera/9.80 (X11; Linux x86_64; U; ru) Presto/2.10.229 Version/11.62"
когда пытаюсь получить этот документ через wget прогрессбар мгновенно доходит приблизительно до 85% и останавливается
[disarmer@desktop ~]$ wget -S http://127.0.0.1/work/cash/out/index%2Ehtml
--2012-03-30 18:26:31-- http://127.0.0.1/work/cash/out/index%2Ehtml
Подключение к 127.0.0.1:80... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа...
HTTP/1.1 200 OK
Server: nginx/1.0.14
Date: Fri, 30 Mar 2012 14:26:32 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 5251
Last-Modified: Fri, 30 Mar 2012 14:19:17 GMT
Connection: keep-alive
Expires: Sun, 29 Apr 2012 14:26:32 GMT
Cache-Control: max-age=2592000
Vary: Accept-Encoding
Accept-Ranges: bytes
Длина: 5251 (5,1K) [text/html]
Сохранение в каталог: ««index.html»».
длина в заголовке 5251 байт а реальный размер документа 4540 байт.
видимо такой длины документ был до изменения.
Если документ увеличивается то он отдается со старым значением длины и получается обрезанныи,
Это не баг. Файлы нужно обновлять атомарно (создавать новый файл, и потом переименовывать в нужное имя), в противном случае существует race: при открытии файла он имеет один размер/содержимое (и именно этот размер отдаётся в заголовках), а в процессе отправки размер и содержимое меняются. Использование open_file_cache позволяет закешировать результаты открытия файла надолго, таким образом существенно облегчая наблюдение последствий неатормарного обновления файлов.