它是随机发生的,并且仅在 Moodle 装置上发生。发生这种情况时,Apache 不会在日志中添加一行,我也不知道去哪里找。
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
apache conf 非常简单,可以在其他虚拟主机中完美运行
<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>
使用 apache 2.2.9 php 5.2.6 和 moodle 1.9.5+(内部版本:20090722)
欢迎任何想法:)
查看主服务器错误日志,它应该有一些Child Segfault Error (11)。
这可能是由 PHP 引擎故障引起的,通常由错误的 php 模块、unicode 字符处理、gettext 损坏的 DB 等引起。
调试非常困难。
您可以启用xdebug跟踪并查看它在哪一行出现段错误:
php.ini:
最后通过添加解决
/etc/apache2/envvars
:error_log 中也没有任何内容吗?
您可以将 MaxServers 设置为 1,然后在请求页面时 strace 那个 apache 线程。可能是 PHP 出现了段错误,或者 apache 子进程因其他原因而死亡。
此外,tcpdump 两端的请求以查看在线上正在发送哪些数据。