Apache 不会提供大于 ~2K 的图像

dtb*_*ker 7 apache-2.2

刚刚将旧机器升级到 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 [美联社]
  GET /path/path/logo.png HTTP/1.1..主机:192.1
  68.0.54..Connection:保持活动..接受:application/xml,application/xhtml+
  xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5..User-Ag
  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
  ding: gzip,deflate,sdch..Accept-Language: en-US,en;q=0.8..Accept-
  字符集: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..日期:2011 年 3 月 9 日星期三 05:28:38 GMT..服务器:Apa
  che/2.2.14 (Ubuntu)..最后修改时间:2010 年 10 月 5 日星期二 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.................pHYs..................时间..
  等等...

这对我来说没问题!

我尝试过 firefox 和 chrome,它们都可以很好地显示小图像,但是当请求大图像时,浏览器会提示下载文件。

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

vi logo.png:

^@^UÅd^@$^]V^S^H^@E^@^Q,n!@^@@^F^@^@À¨^@6À¨^@^D^@P^Y¬ rÇŹéw^P^@Ú^@^@^A^A^H
^@^GÝ^]^@pbSHTTP/1.1 200 OK^M
日期:2011 年 3 月 9 日,星期三 04:47:04 GMT^M
服务器:Apache/2.2.14 (Ubuntu)^M
最后修改时间:2010 年 10 月 5 日,星期二 11:59:17 GMT^M
ETag:“17b6ff-157c-491dd63eb2f40”^M
接受范围:字节^M
内容长度:5500^M
保持活动:超时=15,最大值=94^M
连接:Keep-Alive^M
内容类型:图像/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) [图像/jpeg]
保存到:`nav_sprite.jpg'

更新:

感谢@uesp 将“EnableMMAP off”添加到/etc/apache2/httpd.conf 并重新启动apache 修复了它,不知道为什么,但确实如此。

干杯!

ues*_*esp 9

您可以尝试以下几点:

  • 尝试EnableSendfile off在 Apache 配置中设置并重新启动(请参阅Apache 核心文档)。也可以尝试EnableMMAP off(有关与您的问题非常相似的问题,请参见此处)。
  • 使用浏览器进行测试时,请确保清除缓存和/或强制重新加载图像。
  • 使用各种文件大小和类型进行测试。它只是PNG文件,所有图像等......?缩小图像大小的范围,最终可能会有所帮助。
  • 尝试测试另一个 Web 服务器(lighttpd、nginx、...)并查看它们是否表现出相同的行为。这应该告诉您问题是 Apache 特定的还是服务器/网络本身的问题。
  • 远程和本地下载文件,看看响应是否有任何不同。

  • 谢谢堆!!我试过 EnableSendfile 和 EnableMMAP off,它自己的“EnableMMAP off”解决了这个问题。我正在阅读该选项的更多内容以找出原因...... (2认同)