Apache httpd基础篇02 — 安装

概述

本章,您将学习到 Apache httpd 的安装。

您可以采用三种方式来安装 Apache httpd:

  • 使用存储库来安装 Apache httpd
  • 使用 Docker 容器技术运行 Apache httpd
  • 编译 Apache httpd 的源代码进行安装

使用存储库进行安装

作者使用的操作系统为 RL 8.10,相关操作如下:

Shell > dnf module list httpd
Rocky Linux 8 - AppStream
Name                  Stream                 Profiles                                  Summary
httpd                 2.4 [d]                common [d], devel, minimal                Apache HTTP Server
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

# 这里使用 httpd 的默认流即可
Shell > dnf -y module enable httpd:2.4 && dnf -y module install httpd:2.4/common

Shell > dnf module list httpd
Last metadata expiration check: 0:03:18 ago on Sat 13 Jun 2026 07:30:14 PM CST.
Rocky Linux 8 - AppStream
Name                Stream                   Profiles                                    Summary
httpd               2.4 [d][e]               common [d] [i], devel, minimal              Apache HTTP Server
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

使用 Docker 容器技术运行 Apache httpd

Apache httpd 有两种镜像,一种是 Docker 官方构建的社区版镜像,一种是适用于企业级生产环境的 DHI(Docker Hardened Images,增强版镜像),前者可以被匿名用户拉取,后者需要使用者登录(docker login)。

这里使用的是社区版镜像,相关操作如下:

Shell > systemctl start docker.service

Shell > docker pull httpd:latest

# 绑定数据卷,即目录映射过文件映射
## 若您已经在宿主机中准备好了 httpd.conf 配置文件,也可以使用 "-v $PWD/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf"
Shell > mkdir -p /httpd/ && cd /httpd/ 
Shell > docker run -d --name "my-httpd" -p 80:80 -p 443:443 \
-v $PWD/www/:/usr/local/apache2/htdocs/ \
-v $PWD/logs/:/usr/local/apache2/logs/ \
httpd:latest

Shell > docker ps
CONTAINER ID   IMAGE          COMMAND              CREATED              STATUS              PORTS                                                                      NAMES
966be10672d5   httpd:latest   "httpd-foreground"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   my-httpd

编译 Apache httpd 的源代码进行安装(推荐)

对于 Apache httpd 而言,除非主版本与次要版本发生变化,否则通常情况下都不太需要对软件包进行升级变更,所以这里推荐使用编译源代码的方式进行安装。

编译安装所需的前提条件:

  • 需要 APR 和 APR-Util - 这是一个软件库,主要目的是提供一个 API ,保证移植在不同平台时其行为和特性都是可预测和相同的,相关下载需要点击 这里
  • PCRE2 - 必需的正则表达式库,相关下载需要点击 Github PCRE2
  • 磁盘空间 - 至少保证有 200MB 的空闲磁盘空间
  • 必要的 ANSI-C 编译器以及构建工具 - 常见如 gccmake
  • 准确的时间 - 可利用 chrony 工具来同步时间
  • Perl 5 - 可选,一些脚本可能需要 Perl 5 解释器

前提条件准备:

Shell > cd
Shell > wget https://dlcdn.apache.org//apr/apr-1.7.6.tar.gz

Shell > wget https://dlcdn.apache.org//apr/apr-util-1.6.3.tar.gz

Shell > wget https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.47/pcre2-10.47.tar.gz

# APR
Shell > tar -vxf apr-1.7.6.tar.gz -C /usr/local/src/
Shell > cd /usr/local/src/apr-1.7.6/
Shell > ./configure --prefix=/usr/local/apr && make && make install

# APR-Util
Shell > cd
Shell > tar -vxf apr-util-1.6.3.tar.gz -C /usr/local/src/
Shell > dnf -y install expat-devel
Shell > cd /usr/local/src/apr-util-1.6.3/
Shell > ./configure --with-apr=/usr/local/apr/bin/apr-1-config --prefix=/usr/local/apr-util && make && make install

# PCRE 2
Shell > cd
Shell > dnf -y install gcc gcc-c++
Shell > tar -vxf pcre2-10.47.tar.gz -C /usr/local/src/
Shell > cd /usr/local/src/pcre2-10.47/
Shell > ./configure --prefix=/usr/local/pcre2 && make && make install 

开始编译 Apache httpd 并进行安装:

Shell > cd 
Shell > wget https://dlcdn.apache.org/httpd/httpd-2.4.68.tar.bz2
Shell > tar -xvf httpd-2.4.68.tar.bz2 -C /usr/local/src/

下面列出了一些常见且比较关键的编译选项:

编译选项 说明 可选或必选
--prefix=PATH‌ 指定 httpd 的安装根目录 必选
--enable-so 启用 DSO(Dynamic Shared Object,动态共享对象)支持 必选
--enable-ssl‌ 启用 HTTPS 支持(mod_ssl) 必选
--enable-rewrite‌ 启用 URL 重写模块(mod_rewrite) 必选
--with-apr=PATH 指定 apr-1-config 文件路径 必选
--with-apr-util=PATH‌ 指定 apu-1-config 文件路径 必选
--with-pcre=PATH 指定 PCRE 或 PCRE 2 的目录路径位置 必选
--with-zlib=PATH‌ 指定 zlib 压缩库的路径,配合 mod_deflate 使用,可对 HTTP 内容进行 gzip 压缩,节省带宽 必选
--with-openssl=PATH‌ 指定 OpenSSL 库的安装路径,供 mod_ssl 使用 必选
--enable-expires‌ 允许设置 HTTP 缓存过期头,有助于浏览器缓存管理,优化性能 必选
--enable-charset-lite‌ 启用字符集转换支持,方便处理不同编码的页面 必选
--enable-mpms-shared=all‌ 将所有 MPM(多处理模块)编译为动态模块,之后可在配置中灵活切换 prefork、worker、event 等工作模式。配合 --with-mpm=MPM 可指定默认模式,例如 --with-mpm=event 必选

有些编译选项不带选项值时会自动从操作系统中寻找相关的库。若需要查看所有的编译选项,查阅 这里

Shell > cd /usr/local/src/httpd-2.4.68/

Shell > ./configure \
--prefix=/usr/local/apache2/ \
--enable-so \
--enable-ssl \
--enable-rewrite \
--with-apr=/usr/local/apr/bin/apr-1-config \
--with-apr-util=/usr/local/apr-util/bin/apu-1-config  \
--with-pcre=/usr/local/pcre2/ \
--with-zlib \
--with-openssl \
--enable-expires \
--enable-charset-lite \
--enable-mpms-shared=all \
&& make && make install 

# 这是编译安装过后的相关目录
Shell > ls -l /usr/local/apache2/
total 56
drwxr-xr-x  2 root root  4096 Jun 13 22:42 bin
drwxr-xr-x  2 root root  4096 Jun 13 22:42 build
drwxr-xr-x  2 root root  4096 Jun 13 22:42 cgi-bin
drwxr-xr-x  4 root root  4096 Jun 13 22:42 conf
drwxr-xr-x  3 root root  4096 Jun 13 22:42 error
drwxr-xr-x  2 root root  4096 Jun 13 22:42 htdocs
drwxr-xr-x  3 root root  4096 Jun 13 22:42 icons
drwxr-xr-x  2 root root  4096 Jun 13 22:42 include
drwxr-xr-x  2 root root  4096 Jun 13 22:42 logs
drwxr-xr-x  4 root root  4096 Jun 13 22:42 man
drwxr-xr-x 14 root root 12288 Jun 13 22:42 manual
drwxr-xr-x  2 root root  4096 Jun 13 22:42 modules

目录说明

  • bin 目录 - 存放二进制可执行文件的目录

  • build 目录 - 保存当初构建时的一些,信息比如 /usr/local/apache2/build/config.nice 文件的内容即当初编译的选项

  • cgi-bin 目录 - 专门用来存放 CGI 程序(通用网关接口程序)的特殊目录。历史上,/cgi-bin/ 目录下曾出现过多次严重的安全漏洞,所以在使用该目录下的文件时需要严格控制权限。所谓 CGI,即一种根据请求信息动态产生回应内容的技术,现如今的 CGI 普遍是经过改良的 FastCGI

    file

  • conf 目录 - 存放配置文件的目录

  • error 目录 - 存放错误信息页面的目录

  • htdocs 目录 - 存放网页文件的目录,默认只有一个 index.html

  • icons 目录 - 小图标文件的存放位置,比如目录图标、文件图标以及不同文件类型(文本、图片、压缩文件、未知文件等)的图标

  • logs 目录 - 日志文件所存放的目录。通常情况下会存在三个文件:access_log(访问日志)、error_log(错误日志)、httpd.pid(进程 ID 文件)。如果服务器启用了 SSL/TLS,logs 目录下还可能额外出现 ‌ssl_access_log‌、‌ssl_error_log‌ 和 ‌ssl_request_log‌ 三个专用于记录 HTTPS 相关访问、错误及握手请求信息的日志文件。

  • man 目录和 manual 目录 - 手册文件所存放的目录

  • modules 目录 - 存放 DSO(Dynamic Shared Object,动态共享对象)文件的专用目录,这些文件都以 .so 后缀结尾

配置文件结构简短说明

Shell > ls -l /usr/local/apache2/conf/
total 104
drwxr-xr-x 2 root root  4096 Jun 13 22:42 extra
-rw-r--r-- 1 root root 18664 Jun 13 22:42 httpd.conf
-rw-r--r-- 1 root root 13064 Jun 13 22:42 magic
-rw-r--r-- 1 root root 61109 Jun 13 22:42 mime.types
drwxr-xr-x 3 root root  4096 Jun 13 22:42 original

在 conf 目录中除了主配置文件 httpd.conf 外,还存在 extra 目录和 original 目录:

  • extra 目录 - 存放着按功能拆分的扩展配置文件的目录,默认情况下里面的文件都没有被加载
  • original 目录 - 在初次安装或升级 Apache httpd 时,安装程序会把原始的、未经修改的配置文件备份到该目录里

如果要修改 Apache httpd 的配置,既可以把所有的配置参数写入到 httpd.conf 文件中,也可以在 httpd.conf 中使用 Include 指令加载其他的配置文件。

关于配置文件的具体内容说明,后面会有专有文档进行说明。

DSO 技术

Apache httpd 采用的是模块化架构,其核心只包含主要功能,而拓展功能则通过模块实现。所谓模块化,指将各个功能和特性进行分离,这么做的好处有:

  • 拓展性强 - 需要什么功能就加载什么模块,不用修改核心代码,通过 LoadModule 指令配置后 reload 即可生效或停用,非常灵活
  • 依赖性弱 - 各个模块功能独立、接口清晰,一个模块的改动不会影响其他模块,模块之间通过标准化的钩子(hook)机制协作,耦合度很低
  • 方便后期维护 - 问题定位更容易,出问题时可以快速排查是哪个模块导致的;升级、修复也只需要替换对应的模块,不需要重新编译整个服务器

提到模块,就不得不提到 DSO(Dynamic Shared Object,动态共享对象)技术,模块的动态加载就是通过 DSO 实现的。所谓「动态加载」,指的是需要新功能时,只需要把功能模块编译出来并通过配置文件加载到 Apache httpd 服务当中,而不需要重新编译整个 Apache httpd。不像有些开源的程序/服务,一旦编译且安装完成后,其功能都是固定的,当需要添加新功能时,必须要重新编译整个程序/服务。

列出所有已经编译进 Apache 内核的静态模块‌:

Shell > /usr/local/apache2/bin/apachectl -l
Compiled in modules:
  core.c
  mod_so.c
  http_core.c

显示当前 Apache 服务器已加载的所有模块‌(包括编译进内核的静态模块,也包括通过 LoadModule 指令动态加载的模块):

Shell > /usr/local/apache2/bin/apachectl -M
Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 mpm_event_module (shared)
 authn_file_module (shared)
 authn_core_module (shared)
 authz_host_module (shared)
 authz_groupfile_module (shared)
 authz_user_module (shared)
 authz_core_module (shared)
 access_compat_module (shared)
 auth_basic_module (shared)
 reqtimeout_module (shared)
 filter_module (shared)
 mime_module (shared)
 log_config_module (shared)
 env_module (shared)
 headers_module (shared)
 setenvif_module (shared)
 version_module (shared)
 unixd_module (shared)
 status_module (shared)
 autoindex_module (shared)
 dir_module (shared)
 alias_module (shared)

括号里标注 static,表示该模块已静态编译进 Apache 内核,即所谓的静态编译模块;而标注为 shared,则表示该模块以 DSO 方式动态加载,即所谓的动态加载模块。

Avatar photo

关于 陸風睿

GNU/Linux 从业者、开源爱好者、技术钻研者,撰写文档既是兴趣也是工作内容之一。Q - "281957576";WeChat - "jiulongxiaotianci",Github - https://github.com/jimcat8
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇