Re: Битые файлы в кеше при gzip ответах
Hello! On Mon, Aug 19, 2019 at 08:08:21PM -0400, Vladislavik wrote: > В общем, более менее разобрался, виноват был open_file_cache, интересная > ситуация с ним выходит: > у нас есть файл 10 кбайт, мы его запросили единожды и он попал в этот кэш. > (если срок жизни кэша большой) Далее файл изменился, стал 15 кбайт и nginx > при запросе файла отдает с диска уже измененный файл, НО обрезает его до > длины, данные о которой все еще лежат в open_file_cache (10 кбайт) в итоге > мы получаем обрезанный / не полный файл на выходе. "Виноват" open_file_cache быть не может - он может лишь сделать проблему, которую вы себе создали, изменяя файлы неатомарно, более видимой. А даты изменений приведены в предыдущем письме, речь явно не идёт о единичном случае. То есть у вас явно процесс, который наступает на одни и те же грабли раз за разом. Выключение open_file_cache проблему, скорее всего, спрячет до сложнонаблюдаемых масштабов, но не решит. -- Maxim Dounin http://mdounin.ru/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Битые файлы в кеше при gzip ответах
В общем, более менее разобрался, виноват был open_file_cache, интересная ситуация с ним выходит: у нас есть файл 10 кбайт, мы его запросили единожды и он попал в этот кэш. (если срок жизни кэша большой) Далее файл изменился, стал 15 кбайт и nginx при запросе файла отдает с диска уже измененный файл, НО обрезает его до длины, данные о которой все еще лежат в open_file_cache (10 кбайт) в итоге мы получаем обрезанный / не полный файл на выходе. Posted at Nginx Forum: https://forum.nginx.org/read.php?21,285250,285346#msg-285346 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Битые файлы в кеше при gzip ответах
Hello! On Mon, Aug 19, 2019 at 05:32:55PM -0400, Vladislavik wrote: > chunked_transfer_encoding on; > > Не может быть причиной? Нет - как видно из ответа в кэше, используется Content-Length, chunked transfer encoding не используется вообще. Не говоря уже о том, что эта директива со значением "on" не имеет смысла, это поведение по умолчанию. > Файл никто не переписывает, лежит и никак не меняется не обновляется, а > nginx порой отдает его обрезанным... Опять же из заголовков ответов в кэше очевидно, что это не так: Last-Modified: Sun, 18 Aug 2019 12:06:39 GMT Last-Modified: Sun, 18 Aug 2019 13:49:45 GMT То есть у файла менялся не только размер, но и дата последнего изменения. В файл явно кто-то лазил, как и чем - искать вам. -- Maxim Dounin http://mdounin.ru/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Битые файлы в кеше при gzip ответах
chunked_transfer_encoding on; Не может быть причиной? Файл никто не переписывает, лежит и никак не меняется не обновляется, а nginx порой отдает его обрезанным... Posted at Nginx Forum: https://forum.nginx.org/read.php?21,285250,285342#msg-285342 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Битые файлы в кеше при gzip ответах
Hello! On Sun, Aug 18, 2019 at 11:12:31AM -0400, Vladislavik wrote: > этот запрос был без gzip, файл каким-то образом nginx был отдан не > полностью, с указанием размера 3492 вместо 3518, как это может быть? Файл > лежит на диске, Как уже говорилось - если файл отдаёт nginx, то наиболее вероятная причина - файл на диске кто-то переписывает по месту. Если файл не меняется - это может быть какая-нибудь забытая синхронизация, которая просто копирует все файлы с другой машины / из другого каталога. -- Maxim Dounin http://mdounin.ru/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Битые файлы в кеше при gzip ответах
этот запрос был без gzip, файл каким-то образом nginx был отдан не полностью, с указанием размера 3492 вместо 3518, как это может быть? Файл лежит на диске, Posted at Nginx Forum: https://forum.nginx.org/read.php?21,285250,285335#msg-285335 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Битые файлы в кеше при gzip ответах
когда битый файл в кэше лежит, в заголовках в файле кэша указан его не полный размер, а так же сам файл обрезан L]]O?Y]WY]zŘy"5d593f4f-da4"Accept-Encoding¶,܋° OW6ì KEY: server.com/js/1.js?44 HTTP/1.1 200 OK Server: nginx Date: Sun, 18 Aug 2019 13:50:05 GMT Content-Type: application/javascript; charset=UTF-8 Content-Length: 3492 Last-Modified: Sun, 18 Aug 2019 12:06:39 GMT Connection: keep-alive Vary: Accept-Encoding ETag: "5d593f4f-da4" Cache-Control: public, max-age=31536000, stale-while-revalidate=31536000, stale-if-error=31536000 Pragma: cache Accept-Ranges: bytes когда файл целый, в кэше лежит уже полный файл, в заголовках в файле кэша указан полный размер S]]yWY]_Y]õyy"5d595779-dbe"Accept-EncodingѦ@6¡S q5¿N KEY: server.com/js/1.js?45 HTTP/1.1 200 OK Server: nginx Date: Sun, 18 Aug 2019 14:22:02 GMT Content-Type: application/javascript; charset=UTF-8 Content-Length: 3518 Last-Modified: Sun, 18 Aug 2019 13:49:45 GMT Connection: keep-alive Vary: Accept-Encoding ETag: "5d595779-dbe" Cache-Control: public, max-age=31536000, stale-while-revalidate=31536000, stale-if-error=31536000 Pragma: cache Accept-Ranges: bytes Файл без упаковки так и весит, 3518 Posted at Nginx Forum: https://forum.nginx.org/read.php?21,285250,285334#msg-285334 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Битые файлы в кеше при gzip ответах
Hello! On Wed, Aug 14, 2019 at 08:43:39AM -0400, Vladislavik wrote: > Ничего не генерится, файлы лежат на диске, созданы один раз и записаны на > диск. Nginx должен сжать его на лету и отдать, вот, что от него требуется, > он это выполняет, но иногда в кэше браузера/клаудфлера лежит обрезанный Что лежит в кэшах браузера и клаудфлера - вопрос к браузеру и клаудфлеру соответственно. Исходный вопрос был про proxy cache - что лежит в нём, когда наблюдается проблема? > файл, например половина его (уже разжатый, тупо не весь, не хватает куска > кода в конце файла) возникает ли ошибка при разжатии я не знаю, видно > только, что файл читаемый, но код не полный, чаще только половина его) я так > понял, что в процессе передачи или упаковки возникает какая-то проблема и > nginx принимает файл от другого nginx/браузера без проверки его на > целостность...Размеры файлов не более 20кб. > Вопрос такой: возможно ли распаковать архив, если он получен не полностью? > (Тк тест в js файла читаемый, но файл состоит только из половины того, что > должно быть) Распаковать - возможно. При распаковке будет известно, полностью получен ответ или нет - по наличию/отсутствию gzip trailer'а (8 байт с CRC32 и размером несжатого ответа). Что делает с этой информацией конкретный распаковщик - тайна сия великая есть, да и не важно. Смотреть надо строго на то, что лежит в кэше nginx'а, см. выше. -- Maxim Dounin http://mdounin.ru/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Битые файлы в кеше при gzip ответах
Ничего не генерится, файлы лежат на диске, созданы один раз и записаны на диск. Nginx должен сжать его на лету и отдать, вот, что от него требуется, он это выполняет, но иногда в кэше браузера/клаудфлера лежит обрезанный файл, например половина его (уже разжатый, тупо не весь, не хватает куска кода в конце файла) возникает ли ошибка при разжатии я не знаю, видно только, что файл читаемый, но код не полный, чаще только половина его) я так понял, что в процессе передачи или упаковки возникает какая-то проблема и nginx принимает файл от другого nginx/браузера без проверки его на целостность...Размеры файлов не более 20кб. Вопрос такой: возможно ли распаковать архив, если он получен не полностью? (Тк тест в js файла читаемый, но файл состоит только из половины того, что должно быть) Если gzip архив можно распаковать, получив только половину файла, то может быть проблема в передаче и не удостоверении, что файл передан полностью. Если архив невозможно распаковать, не получив полностью, значит проблема в упаковщике. Posted at Nginx Forum: https://forum.nginx.org/read.php?21,285250,285271#msg-285271 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Битые файлы в кеше при gzip ответах
Hello! On Wed, Aug 14, 2019 at 07:53:54AM -0400, Vladislavik wrote: > Бэкэенд это nginx который шлет обычные файлы js сжатые с помощью встроенного > gzip Так, а "обычные файлы js", случайно, не перегенерятся (и/или редактируюстся) регулярно? Ну и отступая на пару шагов назад: битые файлы - это что? Обрезанный gzip-контейнер, при распаковке возникает ошибка? Или структура gzip-контейнера не нарушена, всё штатно распаковывается без ошибок, но по результатом распаковки получается только часть того, что ожидалось в файле? Если второе - то это выглядит как проблема с генерацией файлов. Такое бывает, если генерить файлы "по месту" - если к файлу обрататься, пока пишется новая версия, то из него прочитается только часть, уже записанная, но никто не обещал, что это будет ожидаемый файл полностью. Соответственно эта часть и будет отправлена клиенту и закэширована. Чтобы такого не было - надо менять файлы атомарно: написать новый файл рядом с временным именем, потом сделать rename() / mv в нужное имя. -- Maxim Dounin http://mdounin.ru/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Битые файлы в кеше при gzip ответах
Бэкэенд это nginx который шлет обычные файлы js сжатые с помощью встроенного gzip Posted at Nginx Forum: https://forum.nginx.org/read.php?21,285250,285269#msg-285269 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Битые файлы в кеше при gzip ответах
Hello! On Wed, Aug 14, 2019 at 07:30:41AM -0400, Vladislavik wrote: > Максим, прокси версии 1.1 итак установлен, битые файлы на нем и получаются. > Клаудфлер тоже использует 1.1 у них так же битые файлы часто лежат в кеше, > проверял лично. Если так, то наиболее вероятная причина - бэкенд так прислал. Почему и как вылечить - уже, видимо, вопрос к бэкенду. -- Maxim Dounin http://mdounin.ru/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Битые файлы в кеше при gzip ответах
Максим, прокси версии 1.1 итак установлен, битые файлы на нем и получаются. Клаудфлер тоже использует 1.1 у них так же битые файлы часто лежат в кеше, проверял лично. Posted at Nginx Forum: https://forum.nginx.org/read.php?21,285250,285267#msg-285267 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Битые файлы в кеше при gzip ответах
Hello! On Tue, Aug 13, 2019 at 09:52:16PM +0300, Владислав Толмачев wrote: > Добрый день, не пойму как исправить ситуацию, nginx иногда хранит в proxy > кеше битые обрезанные файлы, при использовании на бэкенде gzip, тот же баг > замечен на клаудфлер, иногда в его кеше лешит обрезанный файл, например > половина js файла и помогает только сброс кеша и запрос файла еще раз, что > бы файл стал полный. Что подкрутить, что бы не выключать gzip и http1.1? В > клаудфлере даже замечено то, что половина кэш серверов сохраняет полный > файл, половина хранит его обрезанную версию и выдает ее как правильную Использование сжатия на бэкенде обычно означает, что заголовка Content-Length в ответах бэкенда не будет. Соответственно в HTTP/1.0 окончание ответа будет определяться по закрытию соединения, и если бэкенд по каким-то причинам закрывает соединение, не дослав ответ полностью, то такой ответ имеет шансы быть сохранённым в кэш частично. Лучше всего в подобной ситуации - разобраться, почему таки закрываются соединения, и полечить. Но в качестве workaround'а скорее всего сработает "proxy_http_version 1.1;" в конфиге. Подробнее тут: http://nginx.org/r/proxy_http_version/ru -- Maxim Dounin http://mdounin.ru/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Битые файлы в кеше при gzip ответах
> кеше битые обрезанные файлы, при использовании на бэкенде gzip, тот же > баг Попробуйте выключить настройку в конфигt Nginx sendfile off; Нам это помогло. Posted at Nginx Forum: https://forum.nginx.org/read.php?21,285250,285255#msg-285255 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Битые файлы в кеше при gzip ответах
Добрый день, не пойму как исправить ситуацию, nginx иногда хранит в proxy кеше битые обрезанные файлы, при использовании на бэкенде gzip, тот же баг замечен на клаудфлер, иногда в его кеше лешит обрезанный файл, например половина js файла и помогает только сброс кеша и запрос файла еще раз, что бы файл стал полный. Что подкрутить, что бы не выключать gzip и http1.1? В клаудфлере даже замечено то, что половина кэш серверов сохраняет полный файл, половина хранит его обрезанную версию и выдает ее как правильную -- С уважением Толмачев Владислав. tolmachev.v...@gmail.com skype: vladislaviki icq: 274888266 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru