这种情况随机发生,并且只在 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 配置非常简单,在其他虚拟主机中运行良好
<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)
欢迎提出任何想法:)
答案1
查看主服务器错误日志,应该有一些子段错误 (11)。
这可能是由于 PHP 引擎故障造成的,通常是由于 php 模块有缺陷、unicode 字符处理、gettext 损坏的 DB 等造成的。
调试起来非常困难。
您可以启用调试跟踪并查看哪一行发生段错误:
pecl install xdebug
php.ini:
[xdebug]
xdebug.profiler_enable=1
xdebug.profiler_output_dir="/tmp/xdebug"
xdebug.auto_trace=1 ; enable tracing
xdebug.trace_format=0
xdebug.show_mem_delta=1 ; memory difference
xdebug.show_local_vars=1
xdebug.max_nesting_level=100
答案2
最后通过添加解决了/etc/apache2/envvars
:
export USE_ZEND_ALLOC=0
答案3
error_log 中也没有任何内容吗?
您可以将 MaxServers 设置为 1,然后在请求页面时跟踪该 apache 线程。可能是 PHP 出现分段错误,或者 apache 子进程由于其他原因而死机。
另外,在两端对请求进行 tcpdump 以查看线路上正在发送什么数据。