Apache不会提供大于2K的图片

刚把一个旧盒子升级到了Ubuntu 10.04.2 LTS。 Apache不会将图像显示到超过2K的浏览器。 小图像似乎显示正常。 静态的HTML和PHP继续正常工作。

安装:

 apache2 2.2.14-5ubuntu8.4
 apache2-mpm-prefork 2.2.14-5ubuntu8.4
 apache2-utils 2.2.14-5ubuntu8.4
 apache2.2-bin 2.2.14-5ubuntu8.4
 apache2.2-common 2.2.14-5ubuntu8.4

这是一个在浏览器中不能正常显示的图像的ngrep:

 T 192.168.0.4:32907  - > 192.168.0.54:80 [AP]
   GET /path/path/logo.png HTTP / 1.1..Host:192.1
   68.0.54..Connection:keep-alive.Accept:application / xml,application / xhtml +
   XML,文本/ HTML; Q = 0.9,文本/无格式; Q = 0.8,图像/ PNG,* / *; Q = 0.5..User银
   ent:Mozilla / 5.0(X11; U; Linux x86_64; en-US)AppleWebKit / 534.13
    (KHTML,像Gecko)Chrome / 9.0.597.98 Safari / 534.13 .Accept-Enco
  丁:gzip,deflate,sdch ..接受 - 语言:en-US,en; q = 0.8。接受 - 
  字符集:ISO-8859-1,utf-8; q = 0.7,*; q = 0.3 ....                      

 T 192.168.0.54:80  - > 192.168.0.4:32907 [A]
   HTTP / 1.1 200 OK..Date:Wed,09 Mar 2011 05:28:38 GMT..Server:Apa
   che / 2.2.14(Ubuntu).. Last-Modified:Tue,05 Oct 2010 11:59:17 GMT
   ..ETag:“17b6f4-15fe-491dd63eb2f40”.. Accept-Ranges:bytes ..Conten
   t-Length:5630..Keep-Alive:timeout = 15,max = 100..Connection:Keep
   -Alive..Content-Type:image / png ..... PNG ........ IHDR ...!... v ......
   %......的sRGB ......... BKGD ..............物理学.................时间..
  等等...

这对我来说很好!

我已经尝试过Firefox和Chrome浏览器,都显示小图像,但是当请求一个大的图像浏览器提示下载文件。

当图像文件保存到本地计算机时,它已损坏,这也需要很长时间来保存,这让我觉得浏览器无法看到从Apache发送的内容长度头。 另外,当我查看保存的图像文件时,它包含了来自apache的头文件,以及顶部的一些垃圾文件,如下所示:

 vi logo.png:

 ^ @ ^ ^ UAD @ $ ^】V,3S ^ H ^ @ E 1 @ ^ Q,N!@ ^ @@ ^ F ^ @ ^ @ ^一6A @ ^ @ ^ d ^ @ P 1Y¬ rÇŹéw^ P ^ @Ú^ @ ^ @ ^ A ^ A 1 H
 ^ @ ^ G ^ ^] ^ @ pbSHTTP / 1.1 200 OK ^ M
date:星期三,09三月2011 04:47:04 GMT ^ M
服务器:Apache / 2.2.14(Ubuntu)^ M
 Last-Modified:Tue,05 Oct 2010 11:59:17 GMT ^ M
 ETag:“17b6ff-157c-491dd63eb2f40”^ M
 Accept-Ranges:bytes ^ M
内容长度:5500 ^ M
保持活跃:超时= 15,最大= 94 ^ M
连接:保持活跃^ M
内容types:image / png ^ M
 ^ M
 PNG ^ M
等等...

有任何想法吗? 这让我疯狂。

在apache错误日志中没有任何东西,并且权限是好的(因为图像数据在那里,它只是有点损坏)。

这个Ubuntu的盒子上没有代理或者iptables。

谢谢堆!

戴夫

PS:刚刚尝试从另一台电脑的IE浏览器,同样的问题:( PPS:重新启动服务器,没有帮助。


更新:

感谢那些wget的想法:

这里是远程机器的wget输出(它不能读取头文件)

 dbaker @ fatburt:〜$ wget http://foo/static/images2/nav_sprite.jpg
 -  2011-03-10 17:41:06-- http://foo/static/images2/nav_sprite.jpg
解决foo ... 192.168.0.54
连接到foo | 192.168.0.54 |:80 ...已连接。
 HTTP请求发送,等待响应... 200没有头,假设HTTP / 0.9
长度:未指定
储存到:`nav_sprite.jpg'

这里的wget从本地服务器输出回本身(工作正常)

 wget http://foo/static/images2/nav_sprite.jpg
 -  2011-03-10 17:44:51  -  http://foo/static/images2/nav_sprite.jpg
解决foo ... 192.168.0.54
连接到foo | 192.168.0.54 |:80 ...已连接。
发送HTTP请求,等待响应... 200 OK
长度:79192(77K)[image / jpeg]
储存到:`nav_sprite.jpg'

更新:

谢谢@uesp添加“EnableMMAPclosures”到/etc/apache2/httpd.conf并重新启动Apache修复它,不知道为什么,但它。

干杯!

有几件事你可以尝试:

  • 尝试在Apacheconfiguration中EnableSendfile off ,然后重新启动(请参阅Apache核心文档 )。 也请尝试EnableMMAP off (请参阅此处 ,与您的问题非常相似)。
  • 使用浏览器进行testing时,请确保清除caching并/或强制重新加载映像。
  • testing各种文件大小和types。 它只是PNG文件,所有图像等…? 缩小图像大小的工作范围,最终不会有什么帮助。
  • 尝试testing另一个Web服务器(lighttpd,nginx,…),看看它们是否performance出相同的行为。 这应该告诉你,如果问题是特定于Apache或服务器/networking本身的问题。
  • 远程和本地下载文件,看看回应是否有任何不同。

这个问题不是基于浏览器的,无论您使用哪种浏览器,都会遇到此问题。 该文件已损坏,因为它没有完全下载。 您可以通过scp或ftp传输(您应该这样做来validation它实际上并没有损坏)来validation。

尝试一个wget的特定文件。 这将允许您直接关注下载文件,而不是处理任何可能出现的PHP或HTML问题。

  wget http://your.website.com/path/to/image.png 

另外,试试这个gif和jpg文件,这样你可以肯定,也许这不仅仅是png和升级的东西。

还有一些东西要看你的日志:

  # tail -f /path/to/apache/logs 

这样,当您尝试访问图像时,可以打开第二个terminal并实时观看结果。

如果你没有得到任何的地方(或希望你跟踪问题到Apache而不是图像)卸载,然后重新安装Apache。