Apache 初学者教程
⚡ 智能摘要
Apache HTTP 服务器为超过一半的公共网络提供支持,本资源详细介绍了其架构、安装路径、虚拟主机模型、安全加固、日志记录和生产部署,以便管理员能够自信地在 Linux 上操作它。 Windows 或 macOS 环境。

什么是阿帕奇?
Apache 是一款卓越的应用软件。它是全球使用最广泛的 Web 服务器应用程序,在商业 Web 服务器市场占有超过 50% 的份额。Apache 是类 Unix 操作系统上最常用的 Web 服务器应用程序,但它几乎可以在所有平台上运行,例如: Windows,OS X,OS/2 等。Apache 一词取自美洲原住民部落 Apache 的名字,该部落以其战争和战略技能而闻名。
它是一款模块化、基于进程的 Web 服务器应用程序,每次并发连接都会创建一个新线程。它支持多种功能;其中许多功能被编译成独立的模块,扩展了其核心功能,涵盖了从服务器端编程语言支持到身份验证机制等方方面面。虚拟主机就是其中一项功能,它允许单个 Apache Web 服务器从同一硬件上为多个不同的网站提供服务。
如何安装 Apache
在部署 Apache 之前,了解不同的安装途径非常重要。安装软件包或应用程序的方法有很多种,如下所示。
- 这个开放的特色之一 该Web应用程序的优势在于任何人都可以为自己的环境准备安装程序。 这使得 Debian、Red Hat、FreeBSD 和 SUSE 等各种供应商能够根据其他已安装的应用程序和基础操作系统,自定义 Apache 的文件位置和配置。
- 除了通过供应商提供的安装程序进行安装外,还可以选择从源代码构建并安装 Apache。从源代码安装 Apache 与平台无关,几乎适用于所有操作系统。
Apache Web 服务器是一个模块化应用程序,管理员可以根据需要选择所需的功能并安装不同的模块。
所有模块都可以编译为 动态共享对象 (DSO 是一个可由多个应用程序在执行过程中共享的目标文件)独立于 Apache 主二进制文件而存在。强烈建议使用 DSO 方法;它使在服务器配置中添加、删除或更新模块变得非常简单。
安装 Apache:Linux 平台
在 Red Hat 或基于 rpm 的系统上
如果您使用的是基于 rpm(Red Hat 软件包管理器,一种用于在 Linux 系统上安装应用程序的实用程序)的 Linux 发行版,即 Red Hat、Fedora、CentOS 或 SUSE,则可以通过特定于供应商的软件包管理器或直接从可用的源代码 tarball 构建 rpm 文件来安装此应用程序。
您可以通过所有基于 Red Hat 的发行版(如 CentOS、Red Hat 和 Fedora)上提供的默认软件包管理器安装 Apache。
[root@amsterdam ~]# yum install httpd
可以使用以下命令将 Apache 源代码 tarball 转换为 rpm 文件。
[root@amsterdam ~]# rpmbuild -tb httpd-2.4.x.tar.bz2
要从源代码创建 .rpm 文件,必须在服务器上安装 -devel 软件包。
将源文件转换为 rpm 安装程序后,您可以使用以下命令安装 Apache。
[root@amsterdam ~]# rpm -ivh httpd-2.4.4-3.1.x86_64.rpm
安装完成后,服务器不会自动启动。要启动该服务,您需要在 Fedora、CentOS 或 Red Hat 系统上使用以下任一命令。
[root@amsterdam ~]# /usr/sbin/apachectl start [root@amsterdam ~]# service httpd start [root@amsterdam ~]# /etc/init.d/httpd start
从源代码安装 Apache
如果包管理器构建的 Apache 版本与您的环境不匹配,则可以通过源代码安装获得完全控制权。从源代码安装 Apache 需要在您的服务器上安装 -devel 软件包。您可以从以下位置找到 Apache 的最新可用版本并下载: Apache官方下载页面下载源文件后,将其移动到 /usr/local/src 文件夹。
[root@amserversterdam ~] cd /usr/local/src [root@amserversterdam ~] gzip -d httpd-2.2.26.tar.gz [root@amserversterdam ~] tar xvf httpd-2.2.26.tar [root@amserversterdam ~] httpd-2.2.26
要查看 Apache 的所有可用配置选项,可以使用 ./configure --help 选项。最常用的配置选项是 --prefix={安装目录名称}。
[root@amserversterdam ~]./configure --help [root@amserversterdam ~]./configure --prefix=/usr/local/apache --enable-so [root@amserversterdam ~] make [root@amserversterdam ~] make install
以上示例展示了如何在 `/usr/local/apache` 目录下编译启用了 DSO 功能的 Apache。`--enable-so` 选项允许在运行时通过 DSO 机制将所需的模块加载到 Apache 中,而无需重新编译。
安装完成后,您可以使用您常用的浏览器浏览 Web 服务器的默认页面。如果您的服务器启用了防火墙,则必须在操作系统防火墙中为端口 80 添加例外。您可以使用以下命令打开端口 80。
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
服务iptables保存
您可以看到默认 Apache2 欢迎屏幕 通过浏览您的服务器 IP 地址。
什么是虚拟主机?
Apache 服务器运行起来之后,下一步合乎逻辑的做法就是学习如何在同一台机器上托管多个网站。一个 Apache Web 服务器可以托管多个网站。 SAME 服务器。您无需为每个网站单独配置服务器和 Apache 软件。这可以通过使用服务器的概念来实现。 虚拟主机 or 虚拟主机。
任何你想托管在你的网络服务器上的域名,都需要在 Apache 配置文件中单独添加一个条目。
Apache 虚拟主机的类型
- 基于名称的虚拟主机
- 基于地址或基于 IP 的虚拟主机
基于名称的虚拟主机
基于名称的虚拟主机用于在单个 IP 地址上托管多个虚拟站点。
要配置基于名称的虚拟主机,您需要设置接收所有所需网站 Apache 请求的 IP 地址。您可以使用 Apache 配置中的 `NameVirtualHost` 指令来完成此操作。 httpd.conf 或 apache2.conf 文件。
Apache 虚拟主机示例:
NameVirtualHost *:80 <VirtualHost 192.168.0.108:80> ServerAdmin webmaster@example1.com DocumentRoot /var/www/html/example1.com ServerName www.example1.com </VirtualHost> <VirtualHost 192.168.0.108:80> ServerAdmin admin@example2.com DocumentRoot /var/www/html/example2.com ServerName www.example2.com </VirtualHost>
您可以根据环境需要添加任意数量的虚拟主机。您可以使用以下命令检查您的 Web 配置文件:
[root@amsterdam ~]#httpd -t
Syntax OK
如果配置文件语法错误,将会抛出错误:
[root@115 conf.d]# httpd -t
Syntax error on line 978 of /etc/httpd/conf/httpd.conf:
Invalid command '*', perhaps misspelled or defined by a module not included in the server configuration
基于IP的虚拟主机
要设置基于 IP 的虚拟主机,您的服务器上需要配置多个 IP 地址。因此,Apache 可以服务的虚拟主机数量取决于服务器上配置的 IP 地址数量。如果您的服务器有 10 个 IP 地址,则可以创建 10 个基于 IP 的虚拟主机。
在上图中,两个网站 example1.com 和 example2.com 被分配了不同的 IP 地址,并且正在使用基于 IP 的虚拟主机。
Listen 192.168.0.100:80 <VirtualHost 192.168.10.108:80> ServerAdmin webmaster@example1.com DocumentRoot /var/www/html/example1.com ServerName www.example1.com </VirtualHost> <VirtualHost 192.168.10.109:80> ServerAdmin admin@example2.com DocumentRoot /var/www/html/example2.com ServerName www.example2.com </VirtualHost>
Apache 与 Nginx:快速对比
在规划新部署时,Apache 和 Nginx 经常会被拿来比较。下表总结了最常见的决策要点。
| 因素 | Apache HTTP Server | Nginx的 |
|---|---|---|
| 加工模型 | 每个连接一个进程或线程(prefork、worker、event MPM) | 事件驱动的异步 |
| 配置 | 支持按目录覆盖 .htaccess 文件 | 集中式配置,无需 .htaccess 文件 |
| 动态内容 | mod_php 和其他模块将运行时嵌入到进程中 | 代理服务器到 PHP-FPM 或外部应用服务器 |
| 静态文件吞吐量 | 性能强劲,但每个连接的内存更高 | 在高并发情况下表现出色 |
| 模块生态系统 | 非常大;运行时以 DSO 形式加载。 | 编译型或动态模块,较小的生态系统 |
| 典型用例 | 共享主机、.htaccess 工作流、混合动态应用程序 | Reverse 代理、静态交付、高并发端点 |
Apache 需要什么来运行 Php 文件?
在 Apache 上运行 PHP 文件需要 mod_php的 已在您的服务器上启用。它允许 Apache 解析 .php 文件。它包含 PHP 处理程序,用于解析 Apache 中的 PHP 代码并将 HTML 发送到您的 Web 服务器。
如果您的服务器启用了 mod_php,则在 /etc/httpd/conf.d/ 目录下会有一个名为 php.conf 的文件。您也可以使用以下命令进行检查:
httpd -M | grep "php5_module"
输出类似于:
Apache 中的 Php 处理程序
- mod_php的
- CGI
- 快速CGI
- 超级PHP
mod_php的 是最古老的 PHP 处理程序;它将 PHP 集成到 Apache 中,并且不调用任何外部 PHP 进程。此模块默认安装在每个 Linux 发行版软件仓库中,因此启用或禁用它非常简单。
如果您在使用 快速CGI 作为您的 PHP 处理程序,您可以设置多个版本的 PHP 以供服务器上的不同帐户使用。
FastCGI,也就是 的mod_fastcgi是 的扩展 mod_fcgid,在 Moku:Pro 上 mod_fcgid 是 CGI(mod_cgi)的高性能替代方案。它启动足够数量的 CGI 实例来处理并发 Web 请求。它还使用 suexec 来支持不同用户拥有各自的 PHP 实例,并提高了 Web 安全性。
在 Apache 上运行 Ruby 文件需要启用 mod_ruby 模块。Apache 也可以通过 FastCGI 处理 Ruby 文件。借助 mod_fcgid(即 FastCGI),可以使用多个 Ruby 版本。
您还可以安装 Apache Passenger 并配置 Apache 以使用它来提供 Ruby 页面。
(Phusion Passenger,也称为“乘客“(是一个免费的 Web 服务器模块,旨在与 Apache 和 Nginx 集成。)
在服务器上安装 mod_ruby 的步骤:
cd /tmp wget http://www.modruby.net/archive/mod_ruby-1.2.6.tar.gz tar zxvf mod_ruby-1.2.6.tar.gz cd mod_ruby-1.2.6/ ./configure.rb --with-apr-includes=/usr/include/apr-1 make make install
如何在 Apache 中运行 Ruby
我们需要将 mod_ruby 模块添加到 Apache 配置中,即 /etc/httpd/conf.d/ruby.conf,并添加以下行。
加载模块 ruby_module 模块/mod_ruby.so
如果要启用或禁用这些模块,必须编辑 Apache 配置文件,并注释或取消注释这些模块(前提是 Web 服务器已编译了这些模块)。
如何保护 Apache Web 服务器
一旦 Apache 服务器能够提供正确的内容,下一步就是加强安全防护。保护您的 Web 服务器至关重要;这意味着只允许他人看到预期的信息,保护您的数据,并限制访问权限。
这些都是增强 Apache Web 服务器安全性的常见做法。
1)隐藏 Apache 版本和操作系统信息
Apache 会在错误信息中显示其版本和操作系统名称,如下面的屏幕截图所示。
攻击者可以利用这些信息,利用服务器或操作系统特定版本中公开存在的漏洞发起攻击。
为了阻止 Apache 显示此信息,我们需要修改 Apache 配置文件中的“服务器签名”选项。默认情况下,该选项为“开启”;我们需要将其设置为“关闭”。
vim /etc/httpd/conf/httpd.conf
ServerSignature Off ServerTokens Prod
我们还设置了“ServerTokens Prod”,告诉 Web 服务器只返回 Apache,并抑制操作系统的主版本号和次版本号。
修改配置文件后,必须重启或重新加载 Apache Web 服务器才能使更改生效。
service httpd restart
2)禁用目录列表
如果您的文档根目录没有索引文件,则默认情况下,您的 Apache Web 服务器将显示文档根目录的所有内容。
可以通过 Apache 配置文件中的“Options”指令,为特定目录关闭此功能。
<Directory /var/www/html> Options -Indexes </Directory>
3)禁用不必要的模块
禁用所有未使用的不必要模块是一种良好的实践。您可以在 Apache 配置文件中查看已启用模块的列表。
[root@amsterdam ~]#httpd -M
perl_module (shared)
php5_module (shared)
proxy_ajp_module (shared)
python_module (shared)
ssl_module (shared)
列出的许多模块都可以禁用,例如 mod_imap、mod_include、mod_info、mod_userdir 和 mod_autoindex,因为它们几乎不被任何生产 Web 服务器使用。
vi /etc/httpd/conf/httpd.conf
#LoadModule auth_digest_module modules/mod_auth_digest.so
将模块注释掉后,保存文件。
使用以下命令重启 Apache 服务。
/etc/init.d/httpd restart
4)限制对网站根目录之外文件的访问
如果您想确保无法访问网站根目录之外的文件,则必须确保在网站服务器配置文件中使用“允许”和“拒绝”选项限制该目录的访问。
<Directory/> Options None AllowOverride None Order deny,allow Deny from all </Directory>
一旦您限制了对 Web 根目录之外的访问,您将无法访问 Web 服务器上任何其他文件夹中的任何文件;您将收到 404 返回代码。
5) 使用 mod_evasive 反击 DoS 攻击
如果您想保护您的 Web 服务器免受 DoS(拒绝服务)攻击,则必须启用 mod_evasive 模块。这是一个第三方模块,可以检测 DoS 攻击并阻止其造成更大的损害。您可以从下方链接下载该模块。
6) 使用 mod_security 增强 Apache 安全性
该模块可作为 Apache 的防火墙,并允许您实时监控流量。它还能防止 Web 服务器遭受暴力破解攻击。您可以使用发行版的默认软件包管理器安装 mod_security 模块。
7)限制请求大小
Apache 对 HTTP 请求的总大小没有任何限制,这可能导致拒绝服务 (DoS) 攻击。您可以使用 Apache 指令“LimitRequestBody”在 Directory 标签内限制请求大小。该值可以根据您的需求设置为 0 到 2 GB(2147483647 字节)之间的任何值。
<Directory "/var/www/html/uploads"> LimitRequestBody 512000 </Directory>
Apache 日志格式
服务器加固后,日志审查成为发现问题的主要工具。Apache 日志提供详细信息,有助于检测服务器的常见问题。
要创建访问日志,必须启用 mod_log_config 模块。
Apache 配置文件中提供了三个指令
- TransferLog:创建日志文件。
- LogFormat:指定自定义格式。
- 自定义日志:创建和格式化日志文件。
TransferLog 指令在 Apache 配置文件中可用,它会根据设定的参数轮换虚拟主机日志文件。
<VirtualHost www.example.com> ServerAdmin webmaster@example.com DocumentRoot /usr/www/example/httpd/htdocs/ ServerName www.example.com ServerAlias example.com www.example ErrorLog /usr/www/example/httpd/logs/error_log TransferLog /usr/www/example/httpd/logs/accesslog CustomLog /usr/www/example/httpd/logs/accesslog combined </VirtualHost>
Apache 日志格式有两种
- 通用日志格式
- 组合日志格式
您可以通过编辑 Apache 配置文件(即 apache2.conf)来启用它们(Debian/)。Ubuntu)或 httpd.conf(基于 rpm 的系统)。
通用日志格式
LogFormat "%h %l %u %t \"%r\" %>s %b" common CustomLog logs/access_log common
Apache 生成的常见日志
[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1] client denied by server configuration: /export/home/live/ap/htdocs/test
组合日志格式
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined CustomLog log/access_log combined
在这里,
- %h 是远程主机。
- %l 是由 identd 确定的用户身份。
- %u 是通过 HTTP 身份验证确定的用户名。
- %t 是服务器完成处理请求的时间。
- %r 是来自客户端的请求行。(“GET / HTTP/1.0”)
- %>s 是服务器发送给客户端的状态码(500、404 等)。
- %b 是客户端响应的大小(以字节为单位)。
- 来源页面是指链接到此页面的页面。 URL.
- User-agent 是浏览器识别字符串。
Apache 生成的组合日志:
199.187.122.91 - - [06/Mar/2014:04:22:58 +0100] "GET /robots.txt HTTP/1.1" 404 1228 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)"
自定义日志会为服务器上的每个虚拟主机创建一个单独的日志文件。需要在配置文件中的虚拟主机部分进行指定。
您可以在下方看到虚拟主机配置;生成的日志将针对该虚拟主机进行自定义,并且格式将合并。
配置您的第一个生产 Web 服务器
配置、安全和日志记录都已就绪,最后一步是将所有内容整合到一个可用于生产的环境中。
1. 为了运行生产环境的 Web 服务器,您需要一个专用服务器。 节点 (物理、虚拟或云实例)运行 Linux、Unix、 Windows, macOS等等。
2. Web 服务器必须具备 直接网络连接 配备 静态IP地址 对其进行配置。
3. 它需要具备所有 模块 运行网页需要启用 PHP 模块。如果 Web 服务器处理 PHP 页面,则需要启用 PHP 模块。
- 它还需要良好的 杀毒软件 已配置并运行的应用程序,用于保护 Web 服务器免受恶意软件或病毒攻击。您还需要一种机制来 更新 定期运行已配置的防病毒或反恶意软件应用程序,无需任何人工干预,即可获得最大效益。
- 如果您需要在 Web 服务器上托管数百个域名,则必须实施 每个域的文件系统配额限制、每个域可以创建的数据库数量限制、每个域的电子邮件帐户数量限制等等。
- 如果您的网络服务器已配置好,则 使用共享主机服务时,需要限制您网站服务器上的用户数量。共享主机用户应拥有最小权限,以避免损坏重要文件或导致服务器崩溃。Apache 本身并不提供此类功能,需要借助第三方应用程序并对操作系统进行定制才能实现。
- 如果您要添加 新域名 在您的 Web 服务器上,需要编辑数百个配置条目才能为添加的域启用所有功能。
- 如果其中一个托管域需要 不同的 PHP 设置 与其他域相比,在 Apache 核心中实现此功能非常复杂,需要对 Web 服务器进行广泛的定制。
- 生产 Web 服务器需要 火墙 阻止可能导致服务器负载过高的不必要流量。实施方法 IP表 使用命令行配置规则非常复杂。它需要具备 Linux 或 Unix 核心环境的专业知识,才能编写有效的防火墙规则来阻止不必要的流量。IPTABLE 基于 netfilter 模块;它是一个操作系统级别的防火墙,允许管理员为服务器上的入站和出站流量创建规则。
- 生产 Web 服务器需要几个不同的应用程序,例如 电子邮件, 则fTP 用于文件上传,以及 域名系统 对于停放的域名。在核心 Linux 或 Unix 系统上管理所有这些应用程序需要具备相关技术的专业知识。
因此,可以说管理多域Web服务器是一项非常复杂的任务,需要编辑数百个配置文件,并对每个应用程序进行定制以实现预期结果。对于初学者来说,排查任何配置错误都将非常困难。
使用Cpanel或类似软件的解决方案
cPanel 提供了一种图形化的方式来管理您的 Web 服务器。cPanel旨在提供易于使用和配置的大规模主机托管服务。它降低了主机托管和Web服务器管理的技术门槛,简化了复杂任务;它提供了许多实用且易于使用的Web界面,可执行运行Web服务器所需的常见系统管理任务。
cPanel 编译了其自己的软件版本。
如果要在普通的 Linux 平台上重新编译 Web 服务器(Apache),则必须手动选择或查找所需的模块。cPanel 提供 EasyApache 功能,这是一种基于脚本的 Web 服务器编译方法。
它不仅为您提供网络服务,而且 MailDNS、FTP 以及您的 Web 应用程序所需的许多其他服务。
使用 cPanel 可以轻松完成一些需要 Linux 或 Unix 主机核心专业知识的任务,例如安装 SSL 证书、使用不同的 PHP 模块重新编译 Apache、更新 Web 安全、配置有效的 IPTABLE 规则、添加 FTP 用户、为每个域创建邮件帐户、使用防病毒软件扫描文档根目录以及创建数据库。
它提供了大量脚本,用于修复、安装和排除常见管理任务的故障。
它提供备份和恢复功能,无需手动将文件复制到备份存储位置。如果您要备份域名,cPanel 将创建一个 tar 文件,其中包含文档根文件夹、电子邮件帐户和邮件、FTP 帐户、数据库、DNS 记录和其他应用程序。
它还提供完善的文档,并拥有一个非常庞大的用户社区,您可以在那里讨论问题并获得解决方案。
因此,我们可以说 的cPanel 是一款功能强大的Web服务器管理应用程序,具备您所需的所有功能。它提供了一个易于使用的域名管理界面,并提供了一种机制来避免管理核心Web服务器的复杂性。
cPanel 的竞争对手有很多,例如 Plesk、ISPConfig、Ajenti、Kloxo、Open Panel 和 ZPanel。

















