我正在使用Vagrant使用PHP 5.5和nginx 1.4.4管理Debian Wheezy的VirtualBox实例。我的本地环境是具有PHP 5.5和Apache 2.2.24的Mac OS X 10.9。我有一个同步的目录,指向该特定项目的文档根目录。
我的本地计算机具有VirtualHost设置,该设置也指向该项目的文档根目录。因此,实际上我有两个可以指向浏览器的URL,并且将执行相同的代码。一个URL到达虚拟机,而另一个URL到达我的本地Apache安装。
我已经能够毫无问题地编辑多个PHP文件。我在本地进行更改,它们立即显示在虚拟机和本地Web服务器上。但是,每当我尝试编辑CSS时,事情都会变得很奇怪。我正在尝试向静态CSS文件添加一行CSS。类似于以下内容:
.body {margin-top:50px}
当我进行此更改时,虚拟机会发疯。我不确定它是否正在发送损坏的文件,或者是否只是在CSS文件的末尾添加了一些奇怪的字符,但我什至无法将其粘贴到此处。我对CSS文件的请求进行了查尔斯转储,响应如下所示:
我已经通过虚拟机查看了vim中的文件。我已经使用多个文本编辑器查看了该文件。对于我的一生,我找不到任何问题。当我通过本地Apache安装加载完全相同的文件时,它可以正常工作:
请注意,
body
声明出现在button
和footer
之间,并且在文档末尾没有奇怪的字符。我注意到的另一件事是我的空白也在某个时候被操纵。有问题的CSS文件使用四个空格进行缩进,但是在虚拟机的响应中,这些行仅包含两个缩进空间。您无法从图片中看到它,因为它们是由Charles格式化的,但是我查看了原始数据。真是奇怪。
您是否知道通过Vagrant / nginx组合与本地/ Apache组合提供服务时导致CSS文件被操纵的原因是什么?
编辑
我将某些字符粘贴到十六进制转换器中,然后将所有字符转换为问号。我尝试了从二进制到十进制的转换,它们都变成了
�
,据我所知,它是“用来替换值未知或无法在Unicode中表示的字符”。我在文件上运行了file --mime
,它返回了rental-application.js: text/plain; charset=us-ascii
。所以...也许是nginx设置?我在使用JavaScript文件时遇到了完全相同的问题。如果我
vagrant destroy
和vagrant up
是到目前为止找到解决该问题的唯一方法。当我必须在两次文件保存之间重新启动VM时,并不能进行快速故障排除。我用来查看文件的每种方法均有效。唯一的问题是何时通过nginx提供服务,这使我认为我的某种编码设置类型错误。这主要是库存设置。
更离奇
如果我
mv rental-application.js rental-application.html
并将页面加载到我的浏览器中,它会完美呈现。如果将名称更改为rental-application.php
,则同样适用。但是,一旦我将名称更改为rental-application.js
或rental-application.css
,我的更改就会消失,并且�
字符会重新出现在文档的末尾。甚至更奇怪
我可以在VM上创建一个js文件,它将通过VM nginx服务器正常加载。如果随后修改了刚创建的文件并重新加载,则不会显示更改,只会显示垃圾字符。
如果我将该文件
mv
替换为以.js
结尾的其他名称,则垃圾字符问题仍然存在。但是,如果我随后将重命名文件的内容cat
编码为具有原始名称的新文件,那么在Universe中一切都很好。
最佳答案
就是这样,如果人们最终因同样的问题而来,他们将获得解决此问题的解决方案:您需要在Web服务器的设置中关闭sendfile()
。
对于Apache:EnableSendfile off
对于Nginx:sendfile off
快速说明:https://coderwall.com/p/ztskha
如果您需要更多详细信息,可以在网上找到更多信息。
现在,您可以喝杯啤酒,享受静态文件的正确传输,而不是其他损坏的文件:)
关于nginx - 我在CSS文件中添加了一行文本,垃圾通过浏览器进入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21422426/