Linux 安装Apache

发布时间 2023-12-25 14:39:19作者: 背对背依靠

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源码包

地址:https://apr.apache.org/

image

下载apache源码包:

地址:https://httpd.apache.org/download.cgi

image

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

image


例如:

mv apr apr-util httpd-2.4.58/srclib

image


说明: 除了这种方法,也可以先编译安装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/

image


安装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 的情况下添加、删除或更新模块。

缺点:

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