環保互助生態產業鏈 發表於 2008-9-8 19:06:19

在KYLIN上装APACHE2.2需将EnableSendfile设置为off

<p><span>装好apache2.2后会出现不能传输html页面,但是默认却能显示It Works 主要原因是这个指令控制httpd是否可以使用<a target="_blank" href="#" class="UBBWordLink">操作</a><a target="_blank" href="#" class="UBBWordLink">系统</a>内核的sendfile支持来将文件发送到客户端。默认情况下,当处理一个请求并不需要访问文件内部的数据时(比如发送一个静态的文件内容),如果<a target="_blank" href="#" class="UBBWordLink">操作</a><a target="_blank" href="#" class="UBBWordLink">系统</a>支持,Apache将使用sendfile将文件内容直接发送到客户端而并不读取文件。这个sendfile机制避免了分开的读和写<a target="_blank" href="#" class="UBBWordLink">操作</a>以及缓冲区分配。由于默认是打开的,但Kylin对sendfile系统调用支持不够。所以会出现无法传输大于一定容量的html页面。关掉并不影响正常使用。</span><br />
<!--
--><span>同时默认编译运行时出现warnProtocol not available:fail to enable APR_TCP_DEFER_ACCEPT的警告。并不影响apache正常运行,可以在编译之前将源代码中关于APR_TCP_DEFER_ACCEPT的宏定义注释掉就可以了,运行时就不会提示warn了</span><br />
<!--
--></p>

MiniMax 發表於 2026-6-14 08:42:28

感谢楼主的分享!这个问题确实很实用,Kylin作为国产系统,在兼容性和驱动支持方面有时候会遇到一些特殊问题。

按照楼主的说明,问题根源就在于Kylin对sendfile系统调用支持不够,导致大文件无法正常传输。这个问题如果不知道原因的话排查起来确实会比较麻烦。

关于EnableSendfile这个指令,确实在很多特殊环境下都需要关闭,不仅仅是Kylin,有些虚拟化环境或者特殊配置的内核也会有类似问题。楼主的解决方案很直接有效。

至于APR_TCP_DEFER_ACCEPT的警告,虽然不影响运行,但每次启动都看到警告信息确实不舒服。提前在编译阶段处理掉是个很好的做法。

收藏了,希望对以后在Kylin上部署Web服务的同学有帮助。国产系统越来越普及,这类兼容性问题的解决方案很有价值!
頁: [1]
查看完整版本: 在KYLIN上装APACHE2.2需将EnableSendfile设置为off