It happens randomly, and only on moodle installations. Apache don't add a line in the logs when this happens, and I don't know where to look.
koke@escher:~/Code/eboxhq/moodle[master]$ curl -I http://training.ebox-technologies.com/login/signup.php?course=WNA001
curl: (52) Empty reply from server
koke@escher:~/Code/eboxhq/moodle[master]$ curl -I http://training.ebox-technologies.com/login/signup.php?course=WNA001
HTTP/1.1 200 OK
The apache conf is quite straightforward and works perfectly in the other vhosts
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /srv/apache/training.ebox-technologies.com/htdocs
ServerName training.eboxhq.com
ErrorLog /var/log/apache2/training.ebox-technologies.com-error.log
CustomLog /var/log/apache2/training.ebox-technologies.com-access.log combined
<FilesMatch "\.(ico|gif|jpe?g|png|js|css)$">
ExpiresActive On
ExpiresDefault "access plus 1 week"
Header add Cache-Control public
</FilesMatch>
</VirtualHost>
Using apache 2.2.9 php 5.2.6 and moodle 1.9.5+ (Build: 20090722)
Any ideas welcome :)
Look at the main server error log, it should have some Child Segfault Error (11).
This is probably given by a PHP engine fault, often given by a buggy php module, unicode chars handling, gettext corrupted DB, and so on.
It is very difficult to debug.
You can enable xdebug tracing and look at what line it is segfaulting:
php.ini:
Finally solved by adding to
/etc/apache2/envvars
:Is there nothing in error_log either?
You could set MaxServers to 1, and then strace that apache thread while requesting the page. It could be that PHP is segfaulting, or the apache child is dying for other reasons.
Also, tcpdump the request at both ends to see what data is being sent on the wire.