Bug#396631: Files served have 0 bytes in spite of claims in headers & log
I'm running Apache on a 2.4 kernel (not by choice, my colo virtual
server requires 2.4), and the latest Apache upgrade has some nasty
problems. The first problem is epoll() compatibility causing child
processes to segfault (already addressed by bug#392049), which I've
fixed by using a libapr1 built on a 2.4 kernel.
The second issue is a lot stranger and harder to track: after installing
the 2.4-friendly libapr1, apache2.2 now manages to run without
segfaulting, but all requests served have 0 bytes in the body. However,
access.log claims that the resource was sent in its entirety (gives the
correct byte count for every file I've tested), and the HTTP headers
claim that Content-Length is (correctly) the size of the file. But
Apache disconnects without actually sending the contents of the file.
I've tested this with multiple browsers, wget, and telnet, and all of
them are disconnected before actually receiving any actual content.
There are no error messages in the error logs, and, from the appearance
of the logs, the server is actually fully functional. An example access
log line is:
184.108.40.206 - - [01/Nov/2006:12:09:35 -0800] "GET /favicon.ico HTTP/1.1" 200 326 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; InfoPath.1)"
which looks perfectly normal. Here's what it looks like with wget:
220.127.116.11 - - [01/Nov/2006:12:26:32 -0800] "GET /favicon.ico HTTP/1.0" 200 326 "-" "Wget/1.10.2"
Again, perfectly, normal, except that what really happens on the
client end is that wget receives 0 bytes, and keeps retrying:
13:29:26 (0.00 B/s) - Connection closed at byte 0. Retrying.
The HTTP headers look like this:
HTTP/1.1 200 OK
Date: Wed, 01 Nov 2006 20:30:21 GMT
Last-Modified: Fri, 13 Jan 2006 03:17:00 GMT
And then the connection is immediately closed without actually sending
the contents of the file.
The files themselves are fine: I've checked both their contents and
their permissions, as well as directory permissions. Besides, if I try
to access a non-existent resource, Apache does successfully send an
error message (with the HTML body intact).
None of these problems show up on my laptop running kernel 2.6, so I
suspect 2.4 incompatibility may be the culprit here. Any suggestions as
to how to obtain more information would be greatly appreciated. I've run
out of ideas as to where to look, since apache isn't crashing and the
logs look perfectly normal. Setting LogLevel to 'debug' shows no
Here are relevant packages:
ii apache2 2.2.3-3 Next generation, scalable, extendable web server
ii apache2-mpm-prefork 2.2.3-3 Traditional model for Apache HTTPD 2.1
ii apache2-utils 2.2.3-3 utility programs for webservers
ii apache2.2-common 2.2.3-3 Next generation, scalable, extendable web server
ii libapr1 1.2.7-6 The Apache Portable Runtime Library
(libapr1 was rebuilt on 2.4 with dpkg-buildpackage to work around
#392049. No changes were made to the Debian sources.)
Two wrongs don't make a right; but three rights do make a left...