Apache 安装 静态编译 动态编译
2014-09-19 09:53 (分类:Linux)
排名第一的web服务器。
(linux环境:CentOS release 6.5 (Final))
安装出错:如下
configure: error: APR not found . Please read the documentation
什么是APR?
APR(Apache portable Run-time libraries,Apache可移植运行库)的目的如其名称一样,主要为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库。
随着Apache的进一步开 发,Apache组织决定将这些通用的函数独立出来并发展成为一个新的项目。这样,APR的开发就从Apache中独立出来,Apache仅仅是使用 APR而已。目前APR主要还是由Apache使用,不过由于APR的较好的移植性。
apache 的apr项目目前有三部分组成,分别是apr、apr-util、apr-iconv
1.apr中包含了一些通用的开发组件,包括mmap,DSO等等
2.apr-util该目录中也是包含了一些常用的开发组件。这些组件与apr目录下的相比,它们与apache的关系更加密切一些。比如存储段和存储段组,加密等等。
3.apr-iconv包中的文件主要用于实现iconv编码。目前的大部分编码转换过程都是与本地编码相关的。在进行转换之前必须能够正确地设置本地编码。因此假如两个非本地编码A和B需要转换,则转换过程大致为A->Local以及Local->B或者B->Local以及Local->A。
1.解决apr not found问题
# 编译和安装 apr-1.4.5
[root@xxx apr-1.4.5]# ./configure --prefix=/usr/local/apr
[root@xxx apr-1.4.5]# make
[root@xxx apr-1.4.5]# make install
2.解决APR-util not found问题
[root@xxx test]# tar -zxf apr-util-1.3.12.tar.gz
[root@xxx apr-util-1.3.12]#./configure --with-apr=/usr/local/apr
[root@xxx apr-util-1.3.12]# make
[root@xxx apr-util-1.3.12]# make install
3.解决pcre问题
[root@xt test]#unzip -o pcre-8.10.zip
[root@xt test]#cd pcre-8.10
[root@xt pcre-8.10]#./configure --prefix=/usr/local/pcre
[root@xt pcre-8.10]#make && make install
3.1
下载pcre-8.20编译安装,make时报错: *** [pcrecpp.lo] Error 1
这里记录下,这个错误是缺少安装gcc-c++,只需
yum -y install gcc-c++
对pcre-8.20重新configure,make && make install通过
4.最后安装Apache
Apache文档目录下
cd httpd-2.4.3
./configure --prefix=/usr/local/apache
在命令后加以下参数
--with-apr=/usr/local/apr
--with-apr-util=/usr/local/apr-util/
--with-pcre=/usr/local/pcre
最后
make
make install
成功编译完成Apache安装~
启动Apache
service httpd start http服务启动
chkcongfig httpd on 设置httpd每次开机自己启动,但并不现在就启动
(如果启动没有成功,看下防火墙是否开启,
*关闭SElinux方法
.修改文件:/etc/selinux/config,将 SELINUX=disabled 然后重启系统
.运行命令:setup,进入”防火墙配置“,在selinux栏,选择”禁用
.运行命令:setenforce 0 不需要重启)
*关闭iptable
service iptables stop
chkconfig iptables off
有时在 执行 service httpd start时出现以下报错
httpd:unrecognized service
解决方法
将apache安装为系统服务
# cp /usr/local/apache2/bin/apachectl /etc/rc.d/init.d/httpd
然后 vi /etc/rc.d/init.d/httpd 添加(#!/bin/sh下面)
# chkconfig: 2345 50 90
# description: Activates/Deactivates Apache Web Server(此处为描述)
参数说明:2345表示在2345这四种启动级别里面加载这个服务,50表示启动(开机时)顺序号,90表示关闭(关机时)顺序号
最后,运行chkconfig把Apache添加到系统的启动服务组里面:
# chkconfig --add httpd
# chkconfig httpd on
然后再service httpd start
apache 的静态编译 和 动态编译
Apache拥有4层结构,从核心到外层的module。
而外层的module可以用通过静态和动态两种方式与Apache共同工作。这也就引入下文的“动态”和“静态”两种编译安装方式:
一、静态编译:
静态编译: 编译的时候,所有的模块自己编译进 httpd 这个文件中 ,启动Apache的时候这些模块就已经加载进来了,可以直接来使用,而不用再 httpd.conf 中在 LoadModule 来加载,只要在 <ifmodule></ifmodule> 中来配置就可以了。
就是编译的时候,使用--enable-mods-shared=[module]或者--enable-[module]=shared 来动态编译。那么什么是动态? 静态是直接编译进httpd中, 那么动态显然就不编译进去了,也就是你启动的时候根本不会加载这个模块, 而是给你一个module.so 文件,你一定要使用Loadmodule 这个语法来加载,这个模块才有效。
说明:
--enable-mods-shared=all 动态加载所有标准模块(并不是说apache所有的模块都已经通过这条命令被加载进来了)
--enable-modules=all 静态加载所有模块,由于编译参数中使用了动态加载所有标准模块,所 以其它需要被编译进来的模块都会以动态加载模块方式进行编译。
enable-so 选项:让 Apache 可以支持DSO模式,但是不实际编译任何动态模块;
注意,这里采用的是 Apache2.0 的语法。如果Apache 是1.3版本,应改为–enable-module=so
总结三点:
1) 如果编译参数中有--enable-mods-shared=all 或者--enable-mods-shared=most,那么所有(大多数)--enable-[module]都将会以动态模式来编译,
除非特别指定--enable-[module]=static 为静态编译
./configure --prefix=/app/apache2
--enable-mods-shared=all
--enable-cache=static
--enable-disk-cache=static
2)如果编译参数中有--enable-modules=all | most 指定所有静态方式的话
还可以用--enable-[module]=shared来动态加载模块。
./configure --prefix=/app/apache2
--enable-modules=all
--enable-cache=shared
--enable-mem-cache=shared
3)特别注意如果编译参数中既有--enable-mods=all静态编译又有--enable-mods-shared=all动态编译,那么最终会使用动态编译。
官方说是静态编译比动态编译性能要好5%左右
推荐是静态编译所有模块,但保留动态加载选项--enable-so,之后还是可以在配置文件中动态加载自己编译的模块。
./configure --prefix=/app/apache2
--enable-modules=all
--enable-cache=static
--enable-mem-cache=static
--enable-file-cache=static
--enable-disk-cache=static
--enable-ssl=satic
--enable-so
举例:
1.安装不带任何参数,只是指定一个安装目录 (静态编译)
/configure --prefix=/app/apache2
来看看默认静态编译安装有哪些模块
# httpd -l
Compiled in modules:
core.c
mod_authn_file.c
mod_authn_default.c
mod_authz_host.c
mod_authz_groupfile.c
mod_authz_user.c
mod_authz_default.c
mod_auth_basic.c
mod_include.c
mod_filter.c
mod_log_config.c
mod_env.c
mod_setenvif.c
mod_version.c
prefork.c
http_core.c
mod_mime.c
mod_status.c
mod_autoindex.c
mod_asis.c
mod_cgi.c
mod_cgid.c
mod_negotiation.c
mod_dir.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_so.c
2.第二次安装使用动态编译安装,参数也只是多了一个
./configure --prefix=/app/apache2 --enable-mods-shared=all
看一下结果
# httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
只有几个核心的模块,也就是说这4个被静态编译进httpd主文件,
随着主进程的开启就直接启动模块了。
再查看httpd.conf配置文件中包含了以下LoadModule 模块的行,共有51个,
这些模块的路径都在modules/ 目录下,这些就是被动态加载的模块,
如果你不需要某个模块,只要在行首加#就可以。
但这51个模块并不是apache的所有模块,
这一点需要搞清楚,在这51个模块之外的其他所有模块都需要在编译参数中明确指定,后面会讲到这一点。
LoadModule authn_file_module modules/mod_authn_file.so LoadModule authn_dbm_module modules/mod_authn_dbm.so LoadModule authn_anon_module modules/mod_authn_anon.so LoadModule authn_dbd_module modules/mod_authn_dbd.so LoadModule authn_default_module modules/mod_authn_default.so LoadModule authz_host_module modules/mod_authz_host.so |
Apache 安装 静态编译 动态编译的更多相关文章
- OpenCV:Debug和Release模式 && 静态和动态编译
1.Release和Debug的区别 Release版称为发行版,Debug版称为调试版. Debug中可以单步执行.跟踪等功能,但生成的可执行文件比较大,代码运行速度较慢.Release版运行速度较 ...
- 关于静态与动态编译arm平台程序的比較
因为近期弄个console程序,调用了readline,ncurses库,这两个动态库加起来有四百多k.而程序事实上非常小,其它地方也没使用到这两个库 所以想静态编译看看console程序有多大. # ...
- Apache静态编译与动态编译详解
Apache拥有4层结构,从核心到外层的module.而外层的module可以用通过静态和动态两种方式与Apache共同工作.这也就引入下文的“动态”和“静态”两种编译安装方式: 静态编译: 编译的时 ...
- JIT(动态编译)和AOT(静态编译)编译技术比较
Java 应用程序的性能经常成为开发社区中的讨论热点.因为该语言的设计初衷是使用解释的方式支持应用程序的可移植性目标,早期 Java 运行时所提供的性能级别远低于 C 和 C++ 之类的编译语言.尽管 ...
- 关于HotSpot VM以及Java语言的动态编译 你可能想知道这些
目录 1 HotSpot VM的历史 2 HotSpot VM 概述 2.1 编译器 2.2 解释器 2.3 解释型语言 VS 编译型语言 3 动态编译 3.1 什么是动态编译 3.2 HotSpot ...
- ASP.NET Core Razor 视图预编译、动态编译
0x01 前言 ASP.NET Core在默认发布情况下,会启动预编译将试图编译成xx.Views.dll,也许在视图中打算修改一处很细小的地方我们需要再重新编译视图进行发布.下面我将从 ASP.NE ...
- Java学习:注解,反射,动态编译
狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! Java学习:注解,反射,动态编译 Annotation 注解 什么是注解 ? Annotat ...
- apache 静态编译和动态编译参考
apache-2.2.22 编译安装笔记 一.静态编译 在使用./configure 编译的时候,即没有使用--enable-mods-shared=[module]或者--enable-[m ...
- apache动态编译与静态编译
静态: 在使用./configure 编译的时候,如果不指定某个模块为动态,即没有使用:enable-mods-shared=module或者enable-module=shared 这个2个中的一个 ...
随机推荐
- Oracle安装连接常见错误
oracle安装注意:安装路径url不能带中文C:\app\59428\product\11.2.0\dbhome_1\sqldeveloper打开sqldeveloper的时候,需要输入java.e ...
- AVR单片机教程——串口接收
本文隶属于AVR单片机教程系列. 上一讲中,我们实现了单片机开发板向电脑传输数据.在这一讲中,我们将通过电脑向单片机发送指令,让单片机根据指令控制LED.这一次,两端的TX与RX需要交叉连接,单片 ...
- 提高开发效率的一些ipython技巧
目录 一.显示ipython快速参考 二.书签功能 三.查看帮助或信息 四.执行python程序 五.执行剪贴板中的代码 六.与操作系统交互 七.测试代码执行时间 八.性能分析 九.matplotli ...
- Mysql.linux登录数据库
//mysql -hlocalhost -uroot -p //-h数据库地址 -u用户名 -p密码 -P端口号(P大写)//-p可省略,会提示输入密码. mysql -h127. -uroot -p ...
- DataFrame分组和聚合
一.分组 1.语法 grouped= df.groupby(by='columns name') # grouped是一个DataFrameGroupBy对象,是可迭代的(遍历) # grouped中 ...
- MySQL日志及索引
MySQL物理结构: MySQL它是通过文件系统对数据进行储存和管理,从物理结构上分为日志文件和数据文件 日志文件: 日志文件记录了数据库操作的信息和一些错误信息,我们常用的日志文件有:错误日志.二进 ...
- maven本地添加Oracle包
因为版权原因,Java后台连接数据库的ojdbc包并不可以用maven直接从网上下载导入,所以需要我们手动将其资源放在本地.下面是步骤: 1.找到Oracle ojdbc6包,拷贝到某备份目录2.包目 ...
- orcle 创建用户的几个步骤
创建用户一般分四步: 第一步:创建临时表空间 第二步:创建数据表空间 第三步:创建用户并制定表空间 第四步:给用户授予权限1.创建临时表空间 create temporary tablespace t ...
- 如何使用Serilog.AspNetCore记录ASP.NET Core3.0的MVC属性
这是Serilog系列的第三篇文章. 第1部分-使用Serilog RequestLogging减少日志详细程度 第2部分-使用Serilog记录所选的终结点属性 第3部分-使用Serilog.Asp ...
- Python 判断小数的函数
需求分析:1.小数点个数可以使用.count()方法2.按照小数点进行分割 例如: 1.98 [1,98]3.正小数:小数点左边是整数,右边也是整数 可以使用.isdigits()方法4.负小数:小数 ...