您的位置:首页 > 运维架构 > Apache

apache动态编译/静态编译问题

2013-07-22 14:34 218 查看

apache动态编译/静态编译问题

以前编译apache的时候

都是google搜索到的直接拿来用

这次自己编译mod_rewrite和ssl遇到了问题

又不知道问题出在哪里

一个是mod_rewrite模块没有起作用

一个是以ssl启动apache的时候报告如下错误:

apachectl startssl

Syntax error on line 246 of /usr/local/apache2/conf/httpd.conf:

Cannot load /usr/local/apache2/modules/mod_ssl.so into server: /usr/local/apache2/modules/mod_ssl.so: undefined symbol: X509_free

后来经过查找

明白了问题出在哪里

当时我是这么编译apache的

./configure

--prefix=/usr/local/apache2

--enable-so

--enable-mods-shared=most

--enable-rewrite

--enable-speling

--enable-forward

--enable-ssl

--with-ssl=/usr/local/openssl

而问题就出在–enable-so

现在知道了–enable-so的意思是说

让apache 核心装载DSO,但是不实际编译任何动态模块

–enable-ModuleName的意思是说 编译并包含模块ModuleName

而 –enable-ModuleName=shared 的意思是说将这个模块编译成动态的.

明白了这几个选项的意思,感觉就水落石出了

根据上面的总结

我应该去掉–enable-so这行

如何希望动态编译模块

比如:–enable-rewrite应该替换为: –enable-rewrite=shared

最后,我将要编译的应该为:

./configure

--prefix=/usr/local/apache2

--enable-mods-shared=most

--enable-rewrite

--enable-speling

--enable-forward

--enable-ssl

--with-ssl=/usr/local/openssl

上面中 –enable-mods-shared=most的意思是说 动态的编译进来大多数的模块

而 –enable-mods-shared=all是指动态的编译所有的模块

如果把-shared去掉,就是静态的编译了…

综上所述

总结出了我个人对apache的动态与静态编译的理解

好比有两个人a和m

a代表apache,m代表module

要想让a使用m的东西

一个方法是把m的东西都放到a那里去,a使用的时候就是现成的了

就是所谓的静态编译

还有一个方法,

就是告诉a, m的住址,当a要使用m的东西的时候,a去找m,然后使用

不过,这种方法要注意的一个问题就是:m必须要有实际的住址,

否则a会找不到m而产生错误的,我此文开始提到的 apachectl startssl产生

的错误就是这个原因,应该再编译好ssl才可以的.

这种方法也就是apache 的动态(DSO)编译了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: