request failed: error reading the headers


Recently I moved my servers from one provider to the other and started to get this messages in apache error log: "request failed: error reading the headers"

Example from the error and corresponding access apache logs:

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)" "-"

I must admit that nothing is changed besides php version (from 5.3 to 5.4).
I don't see any relation to some specific browser or some specific request, it is totally random.
Also it can not be the switch problem because I have the same problem on my other apache servers that are not sharing same switch.

Till now I tried to:
- update network card driver
- raise RX from 256 to 4096 with: ethtool -G eth1 rx 4096
- bond second network card to the interface
- google this problem many times but didn't find the solution or same issue.

Server version: Apache/2.2.15-39 (Unix)
centos 6.5


This is probably a client problem, though why you didn't get it before I could not say.

The error is logged when a request is received by Apache that doesn't complete before the end of the headers section. So as a minimum Apache has receive the request line e.g. GET / HTTP/1.0 but has been sent a valid set of headers after this.

So it could either be no headers at all, or a bunch of headers without the blank line that indicates the boundary between the headers and the body of the request.

I guess it's possible the default PHP timeout may have been changed between your two installations, so that is worth checking, but really this is an indication of a bad (or slow) client making requests to your web server.