apache问题之动与静态编译

今天处理apache安装问题时搜到的文章,其中里面写的几篇文章感觉很赞。

推荐一下http://hi.baidu.com/hellgrowl/archive/tag/apache

转载:关于apache的动态与静态编译

关于apache的动态与静态编译的理解,引用某人的比喻如下:

     好比有两个人a和m,a代表apache,m代表module,要想让a使用m的东西,一个方法是把m的东西都放到a那里去,a使用的时候就是现成的了,就是所谓的静态编译

     还有一个方法,就是告诉a,m的住址,当a要使用m的东西的时候,a去找m,然后使用,不过,这种方法要注意的一个问题就是:m必须要有实际的住址,否则a会找不到m而产生错误的,这种方法也就是apache 的动态(DSO)编译了。


以前编译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)编译了

 

apache的动态和静态编译区别

一、含义:

动态意味着不用此模块的时候就不需要Load进来,使用的时候需要显示的Load进来;

静态意味着先把模块Load进来,想用的时候直接使用.

二、编译:

1、静态编译:

当只需要静态编译module的时候,语法应写成–enable-ssl或–enable-ssl=static。

例如:

#./configure --prefix=/usr/local/apache2 --enable-ssl[=static]

查看哪些modules被静态编译进apache里:

#/usr/local/apache2/bin/httpd -lCompiled in modules: core.c mod_ssl.c

2、动态编译:

当只需要动态编译module的时候,语法写成–enable-ssl=shared即可。

#./configure --prefix=/usr/local/apache2 --enable-ssl=shared

查看哪些modules被动态编译进apache里:

#ls -l /usr/local/apache2/modules/-rw-r--r-- 1 root root 8504 Aug 25 14:49 httpd.exp-rwxr-xr-x 1 root root 806898 Aug 7 13:57 mod_ssl.so

3、静动混合:

当既需要动态又需要动态的时候,语法写成–enable-ssl=static[动态编译] –enable-rewrite=shared[静态编译]

以下为示例:

#./configure --prefix=/usr/local/apache2 --enable-ssl=static --enable-rewite=shared

三、使用:

1、动态编译使用:

会生成相关的so文件,例如:

1)、动态加载module,在配置文件里需要加上如下语句:

LoadModule access_module /usr/local/apache2/modules/mod_ssl.so

2)、使用:

rewriteEngine onRewriteRule ^/(.*) http://www.google.com [L,P]

2、静态编译使用:

例如要使用rewrite模块的时候在配置文件里加下这句就可以了:

RewriteEngine onRewriteRule ^/(.*) http://www.google.com [L,P]

来源:http://huagelinux.blog.163.com/blog/static/87337083201022535916208/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值