Apache用动态编译效率较高,MySQL则相反用静态编译效率。apache动态编译/静态编译区别

jackxiang 2011-2-17 10:10 | |
至于性能方面我没怎么关注, 官方说静态的比动态的在性能方面多5%左右。From:http://www.ha97.com/2612.html

我今天就以apache+mysql+php说一下静态编译和DSO动态编译的区别,我会分别拿apache1.3.27和apache2.0.46
说明,因为两个版本的编译命令是有所区别的。
系统和所需软件:
Redhat9.0  
apache:1.3.27 和 2.0.46
php: 4.3.2
mysql:4.0.13
1。首先来安装mysql,这不是我们的重点,所以关于mysql的安装配置我就很快过去了
tar zvxf mysql-4.0.13.tar.gz
cd mysql-4.0.13
./configure --prefix=/usr/local/mysql --sysconfdir=/etc --localstatedir=/var/lib/mysql &&
make &&
make install
安装完成!
然后初始化数据库
/usr/local/mysql/bin/mysql_install_db
设置权限:
chown -R root /usr/local/mysql
复制配置文件;
cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
启动mysql:
/use/local/mysql/bin/mysqld_safe --user=root &
修改密码:初始的root密码是空的
/usr/local/mysql/bin/mysqladmin -u root -p password 1234
enter password:
把密码修改为1234,由于初始密码为空,所以enter password直接回车就行
测试一下新的密码:
mysql -u root -p mysql
enter password:1234
如果顺利的话就能进入mysql。
好了mysql就讲这么多,有什么问题也不要问我,我对mysql不是很熟悉。
好了下面是我们的重头戏,我将分别通过静态和动态DSO编译apache+php
至于什么是静态,什么是DSO动态我这里就不多讲了,本人个人倾向大家用DSO动态编译。
首先是apache1.3.27+php4.3.2+mysql4.0.13的静态编译
apache第一次编译,并不要安装,因为php的编译需要apache至少已经编译过一次
tar zvxf apache_1.3.27.tar.gz
cd apache_1.3.27
./configure --prefix=/usr/local/apache
编译php
tar zvxf php4.3.2.tar.gz
cd php4.3.2
./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql \
--with-apache=../apache_1.3.27 &&
make &&
make install
第二次编译安装apache:
cd ../apache_1.3.27
./configure --prefi=/usr/local/apache \
--activate-module=src/modules/php4/libphp4.a &&
make &&
make install
cp ../php4.3.2/php.ini.dist /usr/local/php/lib/php.ini
修改/usr/local/apache/conf/httpd.conf
查找<IfModule mod_mime.c>;
在此范围添加
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
注意:apache和php的源码包在同一个目录,--with-apache=../apache_1.3.27是指向源码解压的目录
ok!静态编译完成,大家只要启动一下服务器
/usr/local/apache/bin/apachectl start
然后些个php测试页info.php:内容如下
<?php
phpinfo();
?>;
正常的话,应该能看到php的信息了,恭喜你静态编译成功!!!
我们再来讲讲DSO动态编译的方法:
首先编译安装apache
tar zvxf apache_1.3.27
cd apache_1.3.27
./configure --prefix=/usr/local/apache --enable-module=so \
--enable-module=rewrite --enable-shared=max &&
make &&
make install
so模块用来提供DSO支持的apachehe核心模块,rewrite是地址重写的模块,如果不需要可以不编译
enable-shared=max是指除了so以外的所有标准模块都编译成DSO模块。
然后编译php
tar zvxf php4.3.2.tar.gz
cd php4.3.2
./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql \
--with-apxs=/usr/local/apache/bin/apxs &&
make &&
make install
然后修改httpd.conf,方法同静态编译的方法
OK,DSO动态编译就完成了,大家应该看出明堂来了吧,中间有什么区别应该看的很清楚了吧!!!
接下来我们讲apache2.0.46+php4.3.2的编译方法,我这里只讲DSO动态编译,静态编译实在没有时间测试了,
留给大家自己去试了。
一样现编译安装apache
tar zvxf httpd-2.0.46.tar.gz
cd httpd-2.0.46
./configure --prefix=/usr/local/apache2 --enable-so \
--enable-mods-shared=most &&
make &&
make install
大家注意了--enable-so相当与1.3.27的--enable-module=so,而--enable-mods-shared=most又等同与以前的
--enable-shared=max 这些区别大家要注意了,否则编译错了不要找我
然后还是编译PHP
tar zvxf php4.3.2.tar.gz
./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql \
--with-apxs2=/usr/local/apache2/bin/apxs &&
make &&
make install
注意这里是apxs2!!!
修改httpd.conf与1.3.27也有所不同,大家寻找Add Type application/x-tar .tgz 在下面添加
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
另外要显示中文的话,
修改:
AddDefaultCharset gb2312
启动一下apache
/usr/local/apache2/bin/apachectl start
用那个info.php测试一下,应该不会有多大问题哦!!!
好了写了这么多,希望对大家有所帮助!!!

来源:http://www.chinaunix.net/jh/13/118899.html





这个哥们的动静态编译的文章还不错,转了,URL:
http://huagelinux.blog.163.com/blog/static/87337083201022535916208/

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

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/4029/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2017-7-18 15:52
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]