我花了很多时间来弄清楚 apache2 崩溃的原因。我的环境是:
- Debian 测试
- Apache 2(重写、ssl 等)
- 从 zend repo 安装的 PHP 5.3 Zend
没有什么不寻常的,但 dmesg 说:
apache2[xxxx]: segfault at 18 ip xxxx sp xxxx error 4 in libphp5.so[xxxxx]
我发现的日志中没有其他内容,很难找到问题。
我花了很多时间来弄清楚 apache2 崩溃的原因。我的环境是:
没有什么不寻常的,但 dmesg 说:
apache2[xxxx]: segfault at 18 ip xxxx sp xxxx error 4 in libphp5.so[xxxxx]
我发现的日志中没有其他内容,很难找到问题。
我已经开始从 php 模块中发现问题,因为很多分段错误与 php 模块有关。经过几次测试,我发现禁用模块 curl 可以解决问题。但在我的情况下,卷曲是必需的,所以我必须继续调查。
一个重要的想法是启用 curl 的 php-cli 可以正常工作,并且 php -m 也可以。
所以肯定是apache的问题。一个小时后,我发现禁用 ssl 和启用 curl apache 可以工作。
两个模块(mod_ssl、php_curl)存在冲突。并ldd mod_ssl.so
表明该库依赖于libcrypto.so.1.0.0
. 实际上 aptitude 告诉我 openssl 的版本是 1.0.0-e。但是 phpinfo() 告诉我它是用--with-openssl=/usr/local/openssl-0.9.8o
. 有冲突。有两个模块依赖于 openssl,但使用不同的版本构建:0.9.8o vs 1.0.0-e!
我不得不将我的 apache2 和 openssl 版本降级到适当的版本,现在它可以工作了:ssl 和 curl 都可以。
因为很难弄清楚这个问题,所以我决定在这里发布这个提示。我希望这个小笔记可以帮助某人节省一些时间。