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/

image

下载Apache源码包地址:https://httpd.apache.org/download.cgi

image

说明:

  • 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 目录

image

说明: 将 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

image

具体还需要哪些依赖文件,可以参考官方文档: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:包含一些辅助脚本和程序,这些工具用于服务器的管理和维护

image



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的模块文件

image



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 目录中,就存放了相关模块的源码文件。

image


例如:编译安装mod_echo模块

sudo apxs -i -a -c mod_echo.c

image

说明:

  1. 不管Apache是编译安装还是包管理工具安装,都可以使用apxs来安装模块。

  2. 安装过程中的依赖问题需要自行解决。



Apache 模块的两种模式

静态模式: 模块在编译时被直接集成到 Apache 的 httpd 二进制文件中。

特点:

  • apache 服务器在启动时自动加载这些模块,无需额外的配置。

  • 要添加或移除模块,需要重新编译 Apache 服务器


DSO模式: 是动态共享对象(Dynamic Shared Object)的缩写,模块作为独立的共享对象文件(例如 .so 文件)存在,可以在 Apache 启动时或运行时动态加载。

特点:

  • 灵活性好,在不重新编译 Apache 的情况下添加、删除或更新模块。

  • 有轻微的性能开销,因为模块在运行时被动态加载。

posted on 2024-01-16 16:41  背对背依靠  阅读(305)  评论(0编辑  收藏  举报