me.neoascetic

Vagrant, nginx и отдача статики

Проблема: при использовании Vagrant (в частном случае и VirtualBox - в общем) и отдаче статики, находящейся в директории, примонтированной через vboxsf (для того, чтобы на хост-системе эти файлы модифицировать в редакторе кода, например), эта самая статика может отдаваться не всегда правильно: то браузер получает старый контент, то невалидный (например, часть файла вообще не приходит), то вообще не получает.

Причина: системный вызов sendfile, служащий для копирования данных между двумя файловыми дескрипторами, поломан в vboxsf.

Решение: отключить использование sendfile в nginx, как и советуют везде в интернетах, стоит лишь погуглить по ключевым словам, с помощью sendfile off. После рестарта веб-сервера в большинстве случаев это помогает, но в моем потребовалось обратить внимание также на директиву open_file_cache, ещё одну оптимизирующую штуку, которая кэширует открытые файловые дискрипторы и ещё кое-какую инфу. Можно просто закомментировать, можно выставить в off, и после рестарта веб-сервера статика будет отдаваться так, как нужно.