Apache 版本说明
Apache的版本由三部分组成:主版本号+次版本号+修订版本号
-
主版本号:如果主版本号不同,通常涉及重大变更或重大功能升级
-
次版本号:表示在主版本下的重要更新。奇数表示开发和测试版本。如果是偶数表明是稳定版本。
-
修订版本:通常是针对特定错误修复、安全修补或小的功能改进的更新。
例如:Apache/2.4.58 表示当前版本是稳定版。
Apache版本变更
-
1.x版本:于1995年发布1.0版本
-
2.x版本:于2000年发布2.x版本,此时的架构发生了重大的更新
包管理工具安装
Red Hat系列:
sudo yum install httpd
Debian系列:
sudo apt install apache2
源码编译安装
APR 介绍
APR:Apache Portable Runtime,是Apache服务的一个支持库,用于提供一组API,使Apache HTTP Server等软件能够在不同的操作系统上运行而无需修改代码。
APR官网:https://apr.apache.org/
在这种设计中,APR作为Apache和操作系统之间的中间层,Apache 只需要与 APR 交互,而不需要直接处理各种操作系统的差异。当需要在不同操作系统之间移植 Apache 或其他应用程序时,通常只需针对不同系统调整 APR 的实现,而无需对应用程序本身进行大量修改。使得跨平台的实现变得更简单。
编译安装步骤
1、下载源码包
下载apr和apr-util源码包
下载apache源码包:
地址:https://httpd.apache.org/download.cgi
2、安装编译工具
sudo apt install make gcc
3、合并源码
根据官方文档说明,需要将apr和apr-util的源码放在apache源码的指定位置,然后编译的时候通过--with-included-apr
指定apr和apt-util所在路径即可。
APR 解压到 /httpd_source_tree_root/srclib/apr 目录
APR-Util 解压到 /httpd_source_tree_root/srclib/apr-util 目录
例如:
mv apr apr-util httpd-2.4.58/srclib
说明: 除了这种方法,也可以先编译安装APR和APR-util,然后编译apache源码的时候通过 --with-apr
指定apr安装目录,--with-apr-util
指定apt-util安装目录即可。
4、下载依赖
PCRE 库
根据文档说明,除了安装APR和APR-Util外,还需要PCRE库,PCRE 是执行正则表达式操作所必需的。
PCRE官网:http://pcre.org/
通过包管理工具直接安装:
# debian系列
sudo apt-get install libpcre3-dev
# redhat系列
sudo yum install pcre-devel
Expat 库
在编译 apr-util源码的时候,需要使用到 Expat库,Expat 是一个流行的 XML 解析库,用于解析XML文件。
Expat源码下载:https://github.com/libexpat/libexpat
包管理工具安装:
# debian 系列
sudo apt install libexpat1-dev
# red hat系列
sudo yum install expat-devel
4、生成Makefile文件
Apache的Makefile文件时通过autoconf生成的,所以可以通过autoconf提供的configure脚本来指定相关参数生成Makefile文件。
基础参数:
--prefix
:指定安装目录,默认是在/usr/local/apache2
--with-included-apr
:指定apr和apr-util源码目录位置
指定模块:
在进行编译安装的时候,默认只会安装apache的核心模块,其它的一些模块如果使用到了就需要在编译的时候指定。
说明:一般情况下,编译时候加载模块用下面这两个参数就行了,如果有特殊需求就参考帮助文档:./configure --help | less
--enable-modules
:用于指定哪些模块在编译的时候会被安装,可以是具体的模块名称,也可以是预设值。
-
all:启用所有可用的模块。
-
most:大多数常用的模块。这包括了核心模块以及其他被广泛使用的模块
-
few:只启用一些基本和最常用的模块
-
none:不启用任何模块
-
reallyall:启用所有可用的模块,包括那些通常不包括在 "all" 选项中的模块
--enable-mpms-shared
:用于指定那个MPM模块是OSD模式,也可以使用系统的预设值。
- all:表示将所有的MPM模块指定为动态共享对象(DSO)模块,这样后期可以提供在不停止服务的情况下切换不同工作模式
说明:如果没有将MPM指定为OSD模式,默认是是静态地将 MPM 集成进 Apache那么在需要切换 MPM 时,确实只能通过重新编译 Apache 来实现。这是因为静态链接的 MPM 成为了 Apache 二进制文件的一部分,无法在运行时动态更改。
默认工作模式指定:
通过编译的时候指定不同的MPM模块,就可以指定Apache的默认工作模式
--with-mpm
:用于指定默认的多处理模块(MPM),即运行apache的默认工作模式。
-
event
-
worker
-
prefork
-
innt
所以编译安装Apache,一般需要加这些选项:
sudo ./configure --prefix=/usr/local/apache --with-included-apr=/home/ehigh/apache_source/httpd-2.4.58/srclib --enable-modules=most --enable-mpms-shared=all --with-mpm=event
5、编译安装
sudo make -j 4 && sudo make install
如果编译过程中出现相关错误,需要重新生成Makefile文件,通过 make distclean
删除包括由 configure 生成的 Makefile 和配置文件在内的更多文件
6、环境准备
1、创建一个专有用户来运行apache服务,通过修改apache配置文件可以指定运行httpd的用户
useradd -s /sbin/nologin -r apache
2、配置PATH变量,有两种方法来实现
方法一:通过软链接方式(为了方便维护,一般不用这个方法)
sudo ln -s /usr/local/apache/bin/* /usr/local/bin/
方法二:修改PATH变量的值
# echo "PATH=/usr/local/apache/bin:$PATH" > /etc/profile.d/httpd.sh
$ source /etc/profile.d/httpd.sh
3、满手册配置(如果需要)
添加相关路径:通过指定一个额外的路径,这个路径是系统在查找手册页(即 man pages)时会搜索
如果您编译安装了多个程序,并且这些程序各自带有自己的手册页(man pages)存储在不同的目录中,您可以在 /etc/man_db.conf 文件中使用多个 MANDATORY_MANPATH 指令来指定这些不同的路径。
# vim /etc/man_db.conf
MANDATORY_MANPATH /usr/local/apache/man
运行 mandb 命令来更新手册页数据库
mandb
4、创建service unit文件
ehigh@ubuntu:~$ systemctl cat apache2.service
# /lib/systemd/system/apache2.service
[Unit]
Description=The Apache HTTP Server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/apache/bin/apachectl start
ExecReload=/usr/local/apache/bin/apachectl restart
ExecStop=/usr/local/apache/bin/apachectl stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
相关目录说明
-
bin:存放apache的二进制可执行文件和相关工具
-
build:编译 Apache 时生成的一些构建文件和脚本。这些文件在安装和配置 Apache 过程中被使用。
-
cgi-bin:存放 CGI 脚本的默认目录
-
conf:包含 Apache 的相关配置文件
-
error:服务器错误响应时显示的 HTML 文件和其他相关文档
-
htdocs:Apache 的默认文档根目录
-
icons:存放网页和目录列表中使用的一些标准图标
-
include:Apache 开发时可能需要的头文件
-
lib:存放 Apache 使用的库文件。
-
logs:存放apache的日志文件
-
man:存放apache的man帮助文件
-
manual:存放 Apache 的在线手册
-
modules:存放apache的模块文件
相关工具说明
参考手册:https://httpd.apache.org/docs/2.4/programs/
安装apache后,会提供很多工具,常用的工具有以下:
-
ab:是一个用于基准测试的工具,主要用于测试 Apache HTTP 服务器的性能。
-
apachectl:是一个shell脚本,用于启动、停止、重启 Apache 服务器以及执行一些其他管理任务。
-
envvars:包含设置 Apache 运行环境所需的环境变量。
-
envvars-std:标准环境变量文件,通常用于 envvars 的备份或参考。
-
htpasswd:用于创建和更新存储用户名和密码的文件,以用于基本认证。
-
httpd:Apache HTTP 服务器的主可执行文
-
rotatelogs:Apache 日志文件轮替工具,用于实现日志文件的自动轮换和归档。
Apache 模块模式
Apache HTTP 服务器的模块可以以两种方式集成:静态(Static)模式和动态共享对象(DSO,Dynamic Shared Object)模式。
静态模式
模块在编译时被直接集成到 Apache 的 httpd 二进制文件中。
优点:
-
Apache 服务器在启动时自动加载这些模块,无需额外的配置。
-
因为模块是预先编译且与服务器紧密集成的,所以性能稍好
缺点:
- 要添加或移除模块,需要重新编译 Apache 服务器
例如:在编译 Apache 时以静态模式集成了 Multi-Processing Module (MPM) 模块,如果后面要更改工作模式(改变 MPM 的类型),就需要重新编译。
较老的 Apache 版本,MPM 通常是作为静态模块编译的。但是,从 Apache 2.4 开始,支持将 MPMs 作为动态共享对象(DSO)编译。
动态共享模式
模块作为独立的共享对象文件(例如 .so 文件)存在,可以在 Apache 启动时或运行时动态加载。
优点:
- 灵活性好,在不重新编译 Apache 的情况下添加、删除或更新模块。
缺点:
- 有轻微的性能开销,因为模块在运行时被动态加载。