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

作者: iEdon 分类: 早期归档 发布时间: 2015-04-28 23:58

使用 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

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

5条评论
  • 宜优网

    2015年5月1日 上午8:25

    我用windows+iis来运行php

  • 酷特尔

    2015年5月2日 上午12:55

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

    1. iEdon

      2015年5月2日 上午4:59

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

      1. 酷特尔

        2015年5月2日 下午3:05

        长知识啦。哈哈

  • Taciturn

    2015年5月9日 下午4:11

    表示对windows系统无爱。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

标签云