我在Amazon EC2上的FreeBSD 8.2-RC1上运行Apache 2.2.17,使用peruser MPM(所以它是XEN)。 它是从端口安装的。
我的问题是,虽然Apache正在运行,正在监听和接受连接,但实际上它并没有响应任何信息,或者根本不显示它们。
如果我telnet到正在监听的端口并input一个HTTP请求:
GET / HTTP/1.1 Host: asdfasdf
进入几次,它只是坐在那里…没有。 没有响应请求与浏览器。 在错误日志中似乎没有任何帮助:
[Sun Jan 09 16:56:24 2011] [warn] Init: Session Cache is not configured [hint: SSLSessionCache] [Sun Jan 09 16:56:25 2011] [notice] Digest: generating secret for digest authentication ... [Sun Jan 09 16:56:25 2011] [notice] Digest: done [Sun Jan 09 16:56:25 2011] [notice] Apache/2.2.17 (FreeBSD) mod_ssl/2.2.17
访问日志保持空白:
root:/var/log# wc httpd-access.log 0 0 0 httpd-access.log root:/var/log#
我已经尝试了accf_http和accf_data启用和禁用,并与股票configuration和我的自定义configuration。 我也尝试卸载apache22-peruser-mpm,只是直接安装apache22 …仍然没有运气。 我尝试从httpd.conf中删除所有的LoadModule行,并重新启用parsingconfiguration所需的行。 结束只有以下加载:
root:/usr/local/etc/apache22# /usr/local/sbin/apachectl -M Loaded Modules: core_module (static) mpm_peruser_module (static) http_module (static) so_module (static) authz_host_module (shared) log_config_module (shared) alias_module (shared) Syntax OK root:/usr/local/etc/apache22#
相同的结果。
Apache绝对是什么在端口80上听:
root:/usr/local/etc/apache22# sockstat -4 | grep httpd root httpd 43789 3 tcp4 6 *:80 *:* root httpd 43789 4 tcp4 *:* *:* root:/usr/local/etc/apache22#
而且我知道这不是防火墙的问题,因为本地没有任何东西在运行,并且从本地连接到127.0.0.1:80导致同样的问题。
有谁知道发生了什么事? 为什么会这样做? 我用尽了所有的debugging专业知识。 :/
感谢您的任何build议!
编辑 :根据菲尔Hollenback的build议,我跑了系统调用跟踪。 这是我通过ktrace和truss发现的。
48443 httpd CALL select(0,0,0,0,0xbf7feab4) 48443 httpd RET select 0 48443 httpd CALL gettimeofday(0xbf7feae4,0) 48443 httpd RET gettimeofday 0 48443 httpd CALL wait4(0xffffffff,0xbf7fea98,WNOHANG|WUNTRACED,0) 48443 httpd RET wait4 -1 errno 10 No child processes 48443 httpd CALL select(0,0,0,0,0xbf7feab4) 48443 httpd RET select 0 48443 httpd CALL gettimeofday(0xbf7feae4,0) 48443 httpd RET gettimeofday 0 48443 httpd CALL wait4(0xffffffff,0xbf7fea98,WNOHANG|WUNTRACED,0) 48443 httpd RET wait4 -1 errno 10 No child processes 48443 httpd CALL select(0,0,0,0,0xbf7feab4)
同样的事情重复了一遍又一遍。 (这些是最后几行。)看起来发生的是它正在运行到select,挂起一会,返回0,然后再次尝试。 我不知道这是否是正常的行为,但对我来说似乎没关系,因为它听起来像只是轮询sockets?
我所关心的是等待返回错误的过程不存在。 桁架的输出(我开始的过程中,得到初始设置)显示调用fork()似乎返回罚款(返回一个PID,没有错误)。
如果有帮助,桁架的输出: http : //nucleardog.com/apache-truss.txt (更新为httpd -X 。)
我真的连接在运行 – select似乎从来没有返回一个新的连接? 同样,我在Apacheconfiguration中将LogLevel转为Debug,然后再次尝试运行 – 它从不logging任何连接。
我认为这可能比Apache更像是一个FreeBSD问题,因为看起来Apache从来没有收到请求。 :/
任何(更多)的想法?
编辑2 :这似乎是在FreeBSD的问题,因为Apache似乎没有收到连接请求。 我在FreeBSD论坛(forums.freebsd.org/showthread.php?p=118612)上发了一篇文章,看看能不能find帮助。 谢谢你们的时间!
尝试以下操作:
pstree | less pstree | less找apache高手进程pid strace -p <pid> -f从步骤1的进程表中观察系统调用。 您可能需要从freebsd端口安装pstree和strace。 您应该看到从strace滚动输出,因为它logging了运行Apache进程生成的系统调用(文件打开等)。 这应该给你一些线索,是否apache是否真的在运行,而不是由于某种原因产生输出。
这个关于debuggingapache的页面包含了上面的信息以及其他可以使用的故障排除技巧。
你也提到你的访问日志,但不是你的错误日志,你看过吗? 那里可能有一些额外的诊断信息。
编辑:杜,你确实说过你看错误日志,对不起。 另外是的,truss是默认的freebsd调用跟踪工具,而不是strace。 使用truss是一个更好的答案,因为你不需要像strace这样的端口进行编译。