最新消息:

apache 部份图片、文件,无法显示,加载不完整

Apache 大步 3983浏览 0评论

Ps:我也遇到了这个问题,但是不是这个原因。

 今天发布站点到 Linux 的 apache 服务器上,访问站点时老是有些图片无法显示。刚开始还以为是上传到服务器上文件损坏了,但重新把图片下载下来看是没问题的啊。搞了半天,发现都是比较大的 图片无法显示(大概10K以上的图片无法显示,小的没问题)。于是赶紧 google apache 无法显示大图片,终于找到了答案。

 

解决方法:

 

 

此问题是由apache的一个bug造成的。到apache的主配置文件httpd.conf里将下面一条指令前的#去掉即可。

 

EnableSendfile off 

 

然后使用 shell 命令 重启 apache 服务器 :httpd -k restart 或 service httpd restart 哈哈!

以下是这个指令的相关说明:

 

EnableSendfile 指令

 

说明 使用操作系统内核的sendfile支持来将文件发送到客户端 

 

语法 EnableSendfile On|Off 

 

默认值 EnableSendfile On 

 

作用域 server config, virtual host, directory, .htaccess 

 

覆盖项 FileInfo 

 

状态 核心(C) 

 

模块 core 

 

兼容性 仅在 Apache 2.0.44 及以后的版本中可用

 

这个指令控制httpd是否可以使用操作系统内核的sendfile支持来将文件发送到客户端。默认情况下,当处理一个请求并不需要访问文件内部的 数据时(比如发送一个静态的文件内容),如果操作系统支持,Apache将使用sendfile将文件内容直接发送到客户端而并不读取文件。译者 注:Linux2.4/2.6内核都支持。

 

这个sendfile机制避免了分开的读和写操作以及缓冲区分配,但是在一些平台或者一些文件系统上,最好禁止这个特性来避免一些问题:

 

一些平台可能会有编译系统检测不到的有缺陷的sendfile支持,特别是将在其他平台上使用交叉编译得到的二进制文件运行于当前对sendfile支持有缺陷的平台时。 

 

在Linux上启用IPv6时,使用sendfile将会触发某些网卡上的TCP校验和卸载bug。 

 

当Linux运行在Itanium处理器上的时候,sendfile可能无法处理大于2GB的文件。 

 

对于一个通过网络挂载了NFS文件系统的DocumentRoot(比如:NFS或SMB),内核可能无法可靠的通过自己的缓冲区服务于网络文件。 

 

如果出现以上情况,你应当禁用sendfile :

 

EnableSendfile Off

 

针对NFS或SMB,这个指令可以被针对目录的设置覆盖:

 

<Directory "/path-to-nfs-files"> EnableSendfile Off </Directory>

转载请注明:大步's Blog » apache 部份图片、文件,无法显示,加载不完整

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (2)

  1. 这个好像没有什么效果,还是有静态文件加载不全。
    • 如果apache官网的静态文件相关的文档都没办法,那最后的办法是去网上找个lamp的脚本,对比下配置文件。这个方法绝对能找到问题,哈哈
      大步1周前 (03-14)Reply
SiteMap