解决 Windows 版 Apache 无法访问或假死的问题

使用 Windows Apache 的用户一定会有这样的经历:

在 Windows 上安装并启用 Apache 并无异常,而且会觉得 Apache 感觉真的比 IIS 好。但是在使用了 2-3 天后,Apache 就会出现打不开,访问慢的现象,这个时候只有重启,然而过几天依然如此。iEdon 也遇到了同样的问题。

打开 Apache 的错误日志,可以在里面发现大量的报警:“指定的网络名称不再可用” 这种类似的报警。究其原因,是由于 Apache Windows 版本采用了 Windows Socket 2 模型中的 AcceptEx() 函数。

AcceptEx() 允许得到高于传统 accept() 的性能,并且性能较为显著。显然 Apache 的初衷是好的,但是其实际效果却令人较为失望。至今这个 BUG 未能修复,据说不是 Apache 的错。

解决办法:

要解决这种办法,只要使用 HTTP 过滤(直译)即可。

在 httpd.conf 中添加这四行代码,保存即可:

AcceptFilter http none
AcceptFilter https none
EnableSendfile Off
EnableMMAP off

接下来,烦人的错误就会消失了。


10 responses to “解决 Windows 版 Apache 无法访问或假死的问题”

  1. 我用windows+iis来运行php

  2. 关闭 Sendfile 功能应该会影响apache性能的吧。

    1. Windows 根本就不能用 Sendfile(),这是一个 Linux 函数。
      反正凑合着用吧。

      1. 长知识啦。哈哈

  3. 表示对windows系统无爱。

Leave a Reply

Your email address will not be published. Required fields are marked *