Linux云计算架构-Apache的动态编译和静态编译

Linux云计算架构-Apache的静态编译和动态编译

1. Apache为什么要分为静态编译和动态编译呢?

Apache拥有4层结构,从核心到外层的module,外层的module可以通过静态和动态的方式与Apache共同工作,所以Apache的安装也分为静态编译动态编译

静态编译:编译的时候,所有的模块自己编译进httpd这个文件中,启动Apache时自动加载进去,可直接使用,在httpd.conf中的中来配置即可。

动态编译:编译的时候,使用enable-MODULE=shared或enable_mods_shared=MODULE来进行动态编译,启动apache的时候不会加载这些模块,编译完会给一个module.so文件,可以在httpd.conf中通过loadmodule语句进行加载,此时才算有效。

优缺点比较:

①静态的模块通常在http.conf中用 来配置,动态的要先loadmodule来加载,然后再配置。【静态性能比动态性能好大概5%】

②静态的模块效率高,但配置不灵活,只能重新编译apache。而动态的模块配置较为灵活。

2. 如何进行编译选择?

# apache默认安装的模块
[root@client httpd-2.4.37]# ./configure -help | grep disable

# apache需要enable开启的模块
[root@client httpd-2.4.37]# ./configure -help | grep enable

# 经过博主多次卸载重装apache,终于找到了编译apache的正确方式。
# ./configure --prefix=/usr/local/apache    仅编译安装默认模块
# 此时只有以下四个模块是静态编译的,其他模块在module下都有so文件,可以动态编译进去。
Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 mpm_worker_module (static)


# 如果用到的模块想要静态编译进去,可以指定值static
# ./configure -help | grep enable   查找可以enable的模块
./configure --prefix=/usr/local/apache --enable-deflate   # 这个和不加--enable-deflate一样,都是动态编译的。
./configure --prefix=/usr/local/apache --enable-deflate=static  # 静态编译
./configure --prefix=/usr/local/apache --enable-mods-static=deflate  # 静态编译
# --enable-mods-shared=deflate 等价于 --enable-deflate  # 指定模块动态编译,默认也是动态编译
# --enable-mods-static=deflate   # 指定模块静态编译
# --enable-mods-shared=all # 动态编译所有模块
# --enable-mods-static=all # 静态编译所有模块
# --enable-mpms-shared=all       # mpm模块动态编译
# --enable-mpms-static= all          # mpm模块静态编译
# --enable-deflat=shared   # 指定模块动态编译
# --enable-deflate=static  # 指定模块静态编译
# 默认动态加载,可以指定值static静态加载
--enable-so        # 支持使用DSO动态加载模块,默认静态编译
--enable-ssl       # 支持ssl安全认证,默认动态编译
--enable-rewrite   # 支持url地址重写,默认动态编译
--enable-deflate   # 支持文件压缩传输,默认动态编译
# --disable-alias  # 不安装alias

通过以上分析,要动态编译或者静态编译某个模块都可以做到了。

3. 如果某个模块不存在so文件,又不能重新编译apache,该怎么办?

# 如果不存在/usr/local/apache/modules/mod_deflate.so模块文件,可以用以下方式动态编译进去
# 以DSO方式安装-shared
# DSO:Dynamic shared object 动态共享对象 。DSO模块可以在编译服务器之后编译,也可以用Apache扩展工具(apxs)编译并增加
# /usr/local/apache/bin/apxs -c -i -a
# -c:明需要执行编译操作。
# -i:需要执行安装操作,以安装一个或多个动态共享对象到服务器的 modules 目录。
# -a:自动增加一个 LoadModule行到httpd.conf文件中,以激活此模块,如果此行已经存在,启用。
# 模块所在目录:/usr/local/src/httpd-2.4.37/modules/filters/
[root@master ~]# /usr/local/apache/bin/apxs -c -i -a /usr/local/src/httpd-2.4.37/modules/filters/mod_deflate.c
[root@master ~]# ll /usr/local/apache/modules/mod_deflate.so
-rwxr-xr-x. 1 root root 53168 7月  11 18:32 /usr/local/apache/modules/mod_deflate.so

# 有一个报错
[root@master ~]# /usr/local/apache/bin/apachectl -M | grep deflate
httpd: Syntax error on line 107 of /usr/local/apache/conf/httpd.conf: Cannot load modules/mod_deflate.so into server: /usr/local/apache/modules/mod_deflate.so: undefined symbol: inflate
# 修改apache配置文件的关于模块的内容
[root@master ~]# vim /usr/local/apache/conf/httpd.conf
# 107 LoadFile /usr/lib64/libz.so
108 LoadModule deflate_module     modules/mod_deflate.so
[root@master ~]# /usr/local/apache/bin/apachectl -M | grep deflate
 deflate_module (shared)
# 可以看到,已经将deflate_module模块添加进apache了。

综上,其实对于不是特别大型的网站,动态编译和静态编译区别不大,要什么模块再动态编译进去就行。
学习路上的一些总结,如果有错的,可以评论指出,一起探讨!!!

参考博文:https://blog.csdn.net/weixin_36522099/article/details/107300088

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在arm-linux下交叉编译Apache和PHP的步骤如下: 1. 首先安装交叉编译工具链,例如arm-linux-gcc等工具链。 2. 下载Apache和PHP源码,解压缩到指定目录。 3. 进入Apache源码目录,执行configure命令,指定交叉编译工具链的路径和其他相关参数,例如: ``` ./configure --host=arm-linux --prefix=/usr/local/apache2 --enable-so --disable-ssl --disable-proxy --disable-authn-file --disable-autoindex --disable-dir --disable-env --disable-reqtimeout --disable-userdir --disable-setenvif --disable-status --disable-cgi ``` 其中,--host参数指定目标平台的架构,--prefix参数指定安装目录,--enable-so参数指定支持动态链接库等。 4. 执行make命令编译Apache,然后执行make install命令安装Apache到指定目录。 5. 进入PHP源码目录,执行configure命令,指定交叉编译工具链的路径和其他相关参数,例如: ``` ./configure --host=arm-linux --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --disable-debug --enable-mbstring --enable-zip --enable-bcmath --enable-sockets --enable-pcntl --enable-shmop --enable-sysvmsg --enable-sysvsem --enable-sysvshm --with-curl --with-gd --with-jpeg-dir=/usr/lib --with-png-dir=/usr/lib --with-zlib-dir=/usr/lib --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --without-pear ``` 其中,--with-apxs2参数指定Apache的apxs路径,--with-curl参数指定支持curl库,--with-gd参数指定支持gd库等。 6. 执行make命令编译PHP,然后执行make install命令安装PHP到指定目录。 7. 在Apache的配置文件httpd.conf中添加PHP的模块加载语句,例如: ``` LoadModule php7_module modules/libphp7.so AddType application/x-httpd-php .php ``` 其中,libphp7.so是PHP编译生成的动态链接库。 8. 重启Apache服务器,测试PHP是否正常工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值