请求失败:读取标头时出错

请求失败:读取标头时出错


最近我将我的服务器从一个提供商移动到另一个提供商,并开始在 apache 错误日志中收到以下消息: “请求失败:读取标题时出错”

来自错误和相应访问 Apache 日志的示例:

ApacheServer$ cat  error_log
ApacheServer [Tue Jan 20 11:07:44 2015] [error] [client x.x.x.x] request failed: error reading the headers

ApacheServer$ cat  access_log
x.x.x.x - - [20/Jan/2015:11:06:44 +0200] "GET SomeRandomRequest HTTP/1.1" 400 226 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; BRI/2; MAARJS)" "-"

我必须承认,除了 php 版本(从 5.3 到 5.4)之外,没有任何变化。
我看不出这与某些特定浏览器或某些特定请求有任何关系,它完全是随机的。
而且这不可能是交换机问题,因为我在其他不共享相同交换机的 apache 服务器上也遇到了同样的问题。

到目前为止我尝试过:
- 更新网卡驱动程序
- 使用以下命令将 RX 从 256 提高到 4096:ethtool -G eth1 rx 4096
- 将第二张网卡绑定到接口
- 多次在 Google 上搜索此问题,但没有找到解决方案或同样的问题。

服务器版本:Apache/2.2.15-39 (Unix)
centos 6.5

答案1

这可能是客户端的问题,但我不知道为什么你之前没有得到它。

当 Apache 收到的请求在标头部分结束之前未完成时,将记录此错误。因此,Apache 至少已收到请求行,GET / HTTP/1.0但此后已发送了一组有效的标头。

因此,它可能根本没有标题,或者有一堆标题,而没有指示标题和请求正文之间边界的空行。

我猜想您的两次安装之间默认的 PHP 超时可能已经改变,所以值得检查,但实际上这表明客户端向您的 Web 服务器发出请求时出现了问题(或速度很慢)。

相关内容