编辑:由于我缩小了问题范围,这几乎已被完全重写。
我正在使用 Vagrant VM 尽可能紧密地镜像客户端的环境。我使用的是 VirtualBox 4.3(带有 Guest Additions 4.3)和 Vagrant 1.3.5,服务器运行的是 CentOS 5.9、Apache 2.2.3-83、PHP 5.3.3 和 Drupal 7。
当服务器首次启动时,共享目录中的原始文件(我的应用程序所在的目录)会被缓存。当我更改文件时,会提供原始文件 +/- 文件大小增量,从而导致我之前看到的图像损坏。因此,添加会在原始文件的末尾添加 NUL 字符,删除会截断文件。当我使用内容查看文件时,nano
内容是正确的;重新启动httpd
服务没有任何区别。我必须重新启动虚拟机才能正确提供更改。
前:
// The quick brown fox
变化:
// The quick brown fox jumps over the lazy dog
Apache 提供:
// The quick brown fox\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
这个错误究竟出在哪里?是 Apache 2.2 或其依赖项,还是 VirtualBox 及其 Guest Additions?
答案1
这很可能是 VirtualBox 的错误实现所导致的问题sendfile()
。
尝试设置:
EnableSendfile off
相当于 nginx 的:
sendfile off;