Linux 安装Apache
通过包管理工具安装Apache
redhat系列:
在Red Hat及其衍生版本中,Apache HTTP Server的包名被称为httpd,这是“HTTP daemon”的缩写。
sudo yum install httpd -y
debian系列:
在Debian及其衍生版本中,Apache HTTP Server的包名是apache2。这个命名反映了Apache HTTP Server的主要版本号
sudo apt install apache2 -y
源码编译安装Apache
1、安装编译工具
sudo apt install make gcc -y
说明:Apache是采用autoconf来构建Makefile文件,通过该工具创建的配置脚本configure,该脚本会根据目标系统的特点和用户指定的选项生成适当的 Makefile。
2、下载源码
下载apr和apr-util源码包地址:https://apr.apache.org/
下载Apache源码包地址:https://httpd.apache.org/download.cgi
说明:
-
APR:Apache Portable Runtime 的缩写,提供了一套API,使Apache HTTP Server能够平稳地运行在不同的操作系统上。通过使用apr,Apache HTTP Server的开发者可以编写一次代码,在多种平台上编译和运行,而无需担心平台间的差异。
-
APR-util:是apr的伴生库,提供了一些额外的实用功能,如XML解析、数据库连接等。这些额外的功能对于Apache HTTP Server的某些模块非常重要
3、将apr、apr-util源码和Apache源码合并
APR 解压到 /httpd_source_tree_root/srclib/apr 目录
APR-Util 解压到 /httpd_source_tree_root/srclib/apr-util 目录
说明: 将 apr 和 apr-util 的源码与 Apache 源码合并,然后在编译 Apache 源码的时候一起编译和安装这些组件。这种方法通常被用于确保 Apache 使用特定版本的 apr 和 apr-util,或者在系统上没有预先安装这些库的情况下使用。
4、安装依赖:
# debian 系列
sudo apt install libpcre3-dev libexpat1-dev -y
# redhat 系列
sudo yum install pcre-devel expat-devel -y
具体还需要哪些依赖文件,可以参考官方文档:https://httpd.apache.org/docs/2.4/install.html
5、生成Makefile文件
# 基本参数选项
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
6、编译和安装
make && sudo make install
7、修改PATH变量
# 注意单引号要加上
# echo 'PATH=/usr/local/apache/bin:$PATH' > /etc/profile.d/httpd.sh
$ source /etc/profile.d/httpd.sh
8、创建专有用户
useradd -s /sbin/nologin -r apache
9、mam手册配置
# vim /etc/man_db.conf
MANDATORY_MANPATH /usr/local/apache/man
# mandb
说明:
如果编译安装了多个程序,并且这些程序各自带有自己的手册页(man pages)存储在不同的目录中,可以在 /etc/man_db.conf 文件中使用多个 MANDATORY_MANPATH 指令
来指定这些不同的路径。
这样通过指定一个额外的路径,系统在查找手册页(即 man pages)时会搜索这些路径下的文件。
10、service文件准备
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
Apache的 configure脚本配置选项:
基础选项:
- --prefix:指定Apache服务的安装位置,默认是/usr/local/apache
apr组件选项:
-
--with-included-apr:指定apr和apt-util组件的源码所在路径,应该放在Apache源码目录下的srclib下,并命名为apr和apr-util
-
--with-apr:如果apr已经安装好了,指定apr的安装目录
-
--with-apr-util:如果apr-util已经安装好,指定apr-util的安装目录
模块选项:
--enable-modules:指定哪些模块在编译的时候会被安装,可以是具体的模块名称,也可以是预设值。
-
all:启用所有可用的模块。
-
most:大多数常用的模块。这包括了核心模块以及其他被广泛使用的模块
-
few:只启用一些基本和最常用的模块
-
none:不启用任何模块
-
reallyall:启用所有可用的模块,包括那些通常不包括在 "all" 选项中的模块
--enable-mpms-shared:指定那个MPM模块是OSD模式,也可以使用系统的预设值。
- all:表示将所有的MPM模块指定为动态共享对象(DSO)模块,这样后期可以在不重新编译Apache的情况下切换工作模式。
--with-mpm:指定默认的多处理模块(MPM),即运行apache的默认工作模式。
-
event
-
worker
-
prefork
-
innt
systemd的支持:
- --enable-systemd:在编译时启用对systemd的支持。
Apache 使用apr中间件的原因:
-
Apache的跨平台和兼容性:Apache设计之初,考虑的就是要在多种不同的操作系统和环境中运行。所以通过APR 作为一个抽象层,由它统一的 API 来处理操作系统级的任务,如文件系统操作、网络通信、内存管理等。
-
简化开发和维护:Apache 开发者可以编写一次代码,不需要花费时间去处理各种操作系统特有的细节。
Apache 源码目录介绍:
-
build:包含与构建过程相关的脚本和工具。
-
changes-entries:包含关于Apache版本之间变更的信息
-
docs:包含Apache文档文件。
-
include:包含Apache的头文件。
-
modules:包含Apache的模块源代码。
-
os:包含特定于操作系统的源代码
-
server:包含Apache服务器的核心功能源代码
-
srclib:包含Apache使用的一些第三方库,如APR(Apache Portable Runtime)和APR-Util
-
support:包含一些辅助脚本和程序,这些工具用于服务器的管理和维护
Apache 安装目录介绍:
-
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的模块文件
Apache 相关工具:
官方手册:https://httpd.apache.org/docs/2.4/programs/
apachectl
apachectl其实是一个shell脚本,用于启动、停止、重启 Apache 服务器以及执行一些其他管理任务。
apachectl的两种工作模式:
-
前端控制器模式: 在这种模式下,apachectl充当httpd命令的简单前端。它设置必要的环境变量,然后调用httpd,同时传递任何命令行参数。
-
SysV init 脚本模式: 在这种模式下,apachectl接受简单的一词参数(如start、restart、stop),并将它们转换为发送给httpd的适当信号。
apachectl 命令行选项
-
start:启用apache服务
-
stop:停止apache服务
-
restart:重启apache服务
-
graceful:平滑重启apache服务。即不中断当前连接的情况下重新加载配置文件并启动新的子进程
-
configtest:检查配置文件语法是否正确
-
status:显示Apache HTTP Server的简略运行状态。
前端控制器模式和脚本模式的区别:
两种模式效果上是等价的,取决于使用习惯。
-
前端控制器模式: 可以理解为apachectl等价于 httpd,命令行参数直接传递给 httpd 服务
-
脚本模式: 接受简单的命令(通常是单词),用于控制 Apache 服务。这些命令会被转换为向 httpd 发送适当的信号,从而执行相应的操作。
例如:前端控制器模式
apachectl -t 等价于 httpd -t
apachectl -k graceful 等价于 httpd -k graceful
例如:init模式
apachectl restart
ab工具:
ab全程是Apache Bench。是一个用于基准测试的工具,主要用于测试 Apache HTTP 服务器的性能。
ab 使用场景:
可以对任何支持HTTP的Web服务器进行性能测试,不仅限于Apache服务器。主要用于测试HTTP服务器的性能,更适合于测试Web应用的吞吐量和响应时间
apxs 工具
全称为APache eXtenSion tool,是Apache提供的一个用于构建和安装扩展模块的工具。主要是通过模块的源码创建动态共享对象(DSO)
apxs 使用格式
sudo apxs -i -a -c 模块源码文件
-
-c 选项:编译指定的源代码文件,源文件通常是 .c 扩展名。它会生成一个动态共享对象(.so 文件),这就是实际的 Apache 模块。
-
-i 选项:apxs 会将编译好的模块安装到 Apache 的模块目录中。这相当于 make install 的过程
-
-a 选项:apxs 会自动修改 Apache 的配置文件(通常是 httpd.conf 或 apache2.conf),添加一个 LoadModule 指令来加载新安装的模块。
例如:当前Apache环境已经安装好了,需要echo这个模块,就可以通过编译模块源码实现
sudo apxs -i -a -c mod_echo.c
Apache 模块管理
背景:
存在这么一种情况,如果当前Apache已经安装好了,但是缺少某个模块,不想重新编译安装Apache,这个时候就可以通过apxs工具来编译模块源码实现模块的安装。
apxs 会自动查找 Apache 安装的位置。这包括 Apache 的模块目录(用于存放编译后的模块 .so 文件)和 Apache 的配置文件目录(通常是 httpd.conf 或类似文件所在的目录)。
模块源码存放目录:
在Apache 源码目录下的 modules 目录中,就存放了相关模块的源码文件。
例如:编译安装mod_echo模块
sudo apxs -i -a -c mod_echo.c
说明:
-
不管Apache是编译安装还是包管理工具安装,都可以使用apxs来安装模块。
-
安装过程中的依赖问题需要自行解决。
Apache 模块的两种模式
静态模式: 模块在编译时被直接集成到 Apache 的 httpd 二进制文件中。
特点:
-
apache 服务器在启动时自动加载这些模块,无需额外的配置。
-
要添加或移除模块,需要重新编译 Apache 服务器
DSO模式: 是动态共享对象(Dynamic Shared Object)的缩写,模块作为独立的共享对象文件(例如 .so 文件)存在,可以在 Apache 启动时或运行时动态加载。
特点:
-
灵活性好,在不重新编译 Apache 的情况下添加、删除或更新模块。
-
有轻微的性能开销,因为模块在运行时被动态加载。