早上突然发现我的虚拟机上的WEB应用访问不了了,后台检查httpd服务,无法启动,出现一行提示:
①starting httpd: httpd: Syntax error on line 163 of /etc/httpd/conf/httpd.conf:
②Cannot load /etc/httpd/modules/mod_ldap.so into server:
③/etc/httpd/modules/mod_ldap.so: undefined symbol: apr_ldap_ssl_init
不得不说,apache的错误抛出机制写的真心不错,原因很清晰:
①启动httpd,httpd.conf的163行出错了:
②未能加载mod_ldap.so到apache服务器:
③未知的符号:apr_ldap_ssl_init
这个错误提示原因多是头文件缺失或者头文件和执行程序不匹配导致。
以前运行好好的,怎么突然就出错了呢?
apr_?想起来上周刚安装了最新版本的apache apr,应该是版本冲突。
执行httpd -V,看到如下信息:
========================================
[root@localhost src]# httpd -V
Server version: Apache/2.2.15 (Unix)
Server built: Oct 16 2014 14:45:47
Server's Module Magic Number: 20051115:25
Server loaded: APR 1.5.1, APR-Util 1.5.4
Compiled using: APR 1.3.9, APR-Util 1.3.9
Architecture: 32-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
=======================================
得到确认了,编译使用的是APR 1.3.9,运行时加载了APR 1.5.1(这个是我上周装的最新版),版本冲突了。
解决思路:
①重新编译apache服务器,使用高版本的APR库。
②降低我项目所使用的APR版本,保持和apache一致。
由于产品默认的apache服务器是较低版本,我选择了第二种思路。
新的问题出现了:提示找不到apr_dbd_mysql.so库。
这个看了一下编译后的APR包路径,就比较容易解决了,将apr_dbd_mysql.so文件拷贝到
/usr/lib/apr-util-1(这是低版本的APR默认加载的库路径)下就行了。