nginx - 我在CSS文件中添加了一行文本,垃圾通过浏览器进入

标签 nginx character-encoding vagrant

我正在使用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声明出现在buttonfooter之间,并且在文档末尾没有奇怪的字符。

我注意到的另一件事是我的空白也在某个时候被操纵。有问题的CSS文件使用四个空格进行缩进,但是在虚拟机的响应中,这些行仅包含两个缩进空间。您无法从图片中看到它,因为它们是由Charles格式化的,但是我查看了原始数据。真是奇怪。

您是否知道通过Vagrant / nginx组合与本地/ Apache组合提供服务时导致CSS文件被操纵的原因是什么?

编辑

我将某些字符粘贴到十六进制转换器中,然后将所有字符转换为问号。我尝试了从二进制到十进制的转换,它们都变成了�,据我所知,它是“用来替换值未知或无法在Unicode中表示的字符”。我在文件上运行了file --mime,它返回了rental-application.js: text/plain; charset=us-ascii。所以...也许是nginx设置?

我在使用JavaScript文件时遇到了完全相同的问题。如果我vagrant destroyvagrant up是到目前为止找到解决该问题的唯一方法。当我必须在两次文件保存之间重新启动VM时,并不能进行快速故障排除。

我用来查看文件的每种方法均有效。唯一的问题是何时通过nginx提供服务,这使我认为我的某种编码设置类型错误。这主要是库存设置。

更离奇

如果我mv rental-application.js rental-application.html并将页面加载到我的浏览器中,它会完美呈现。如果将名称更改为rental-application.php,则同样适用。但是,一旦我将名称更改为rental-application.jsrental-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/

相关文章:

curl - vagrant up 不能在 Windows 上工作

python - 使用 CherryPy/Cherryd 启动多个 Flask 实例

javascript - 服务器发送的事件不是(刷新?)正确地与 Flask 和 Redis 与 nginx 前端

node.js - PM2 正在运行额外的进程

xml - 用于欧洲字符的 XSLT 字符填充至固定宽度输出

Java Jersey : Receive form parameter as byte array

ruby - Vagrant Shell 配置脚本运行两次

Nginx X-Forwarded-host 引起的 Django CSRF 错误

java - 使用 PrintWriter,我在浏览器中收到中文乱码

php - 无法安装全局宅基地 : Your requirements could not be resolved