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

今天发布站点到 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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值