简介
Apache 是互联网上最流行的 Web 服务器之一。它用于为超过一半的活跃网站提供服务。虽然有许多可行的 Web 服务器可以为您提供内容,但由于其普及性,了解 Apache 的工作原理是很有帮助的。
本文将检查一些常规配置文件以及其中可以控制的选项。本文将遵循 Apache 文件的 Ubuntu/Debian 布局,这与其他发行版构建的配置层次结构不同。
先决条件
在开始探索 Apache 配置之前,您应该在服务器上安装 Apache。您可以通过阅读我们的《如何在 Ubuntu 20.04 上安装 Apache Web 服务器》教程或《如何在 Debian 10 上安装 Apache Web 服务器》教程来学习如何安装。
Apache 文件层次结构
Apache 将其主要配置文件保存在 /etc/apache2
文件夹中。执行以下命令将列出此文件夹中的所有文件:
command
ls -f /etc/apache2
envars sites-available . apache2.conf .. sites-enabled mods-available ports.conf magic mods-enabled conf-enabled conf-available
该目录中有许多纯文本文件和一些子目录。以下是一些有用的位置,需要熟悉:
apache2.conf
:这是服务器的主要配置文件。几乎所有的配置都可以在此文件中完成,尽管建议使用单独的指定文件以简化操作。此文件将配置默认值,并且是服务器读取配置详细信息的中心点。ports.conf
:此文件用于指定虚拟主机应监听的端口。如果您正在配置 SSL,请确保检查此文件是否正确。sites-available/
和sites-enabled/
:sites-available
目录包含虚拟主机文件配置。此文件夹中的配置将确定为哪些请求提供哪些内容。这是通过链接到sites-enabled
目录来启用的,后者存储已激活的虚拟主机配置文件。当 Apache 启动或重新加载时,它会读取配置文件和链接,从sites-enabled
目录中编译出完整的配置。conf-available/
和conf-enabled/
:这些目录包含未附加到虚拟主机配置文件的配置片段。mods-enabled/
和mods-available/
:这些目录定义可以选择加载的模块。这些目录包含两个组成部分:以.load
结尾的文件,其中包含加载特定模块的片段,以及以.conf
结尾的文件,其中存储这些模块的配置。
Apache 配置不是在单个单片文件中进行的,而是通过模块化设计进行的,可以根据需要添加和修改新文件。
探索 Apache2.conf 文件
您的 Apache 服务器的主要配置详细信息保存在 /etc/apache2/apache2.conf
文件中。
此文件分为三个主要部分:
- 全局 Apache 服务器进程的配置
- 默认服务器的配置
- 虚拟主机的配置
使用您喜欢的文本编辑器打开此文件。以下示例使用 nano
:
command
sudo nano /etc/apache2/apache2.conf
在 Ubuntu 和 Debian 中,此文件用于配置全局定义。使用 Include
指令来处理默认服务器和虚拟主机的配置。
Include
指令允许 Apache 在当前文件中读取其他配置文件,位置在该语句出现的位置。结果是 Apache 在启动时动态生成一个全面的配置文件。
在此文件中可以找到许多不同的 Include
和 IncludeOptional
语句。这些指令加载模块定义、ports.conf
文档、conf-enabled/
目录中的特定配置文件以及 sites-enabled/
目录中的虚拟主机定义:
...
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
...
Include ports.conf
...
IncludeOptional conf-enabled/*.conf
...
IncludeOptional sites-enabled/*.conf
全局配置
有一些选项您可能希望在全局配置中进行修改:
超时
默认情况下,此参数设置为 300
。这意味着服务器最多有 300 秒来完成每个请求。
此参数可以安全地降低到 30
到 60
秒之间。
KeepAlive
如果设置为 On
,此选项将允许每个连接保持打开状态,以处理来自同一客户端的多个请求。
如果设置为 Off
,每个请求都将需要建立一个新的连接,这可能会导致根据您的设置和流量情况产生重大开销。
MaxKeepAliveRequests
这控制每个连接在关闭之前将处理多少个单独的请求。保持此数字较高将使 Apache 更有效地为每个客户端提供内容。
默认设置为 100
。将此值设置为 0
将允许 Apache 为每个连接提供无限数量的请求。
KeepAliveTimeout
此设置指定在完成上一个请求后等待下一个请求的时间。如果达到超时阈值,连接将会断开。
这意味着下次请求内容时,服务器将建立一个新的连接来处理客户端正在访问的页面内容的请求。默认设置为 5
。
检查完这个配置文件的内容后,您可以按 CTRL+X
来关闭它。
多处理模块
多处理模块(MPM)扩展了 Apache 的模块化设计。MPM 负责监听、指导和处理不同的网络请求。您可以使用以下命令交叉引用您的 Apache 安装是在哪个部分编译的:
command
apache2 -L
编译的模块:
core.c
mod_so.c
mod_watchdog.c
http_core.c
mod_log_config.c
mod_logio.c
mod_version.c
mod_unixd.c
您可以使用 a2query -M
命令检查服务器上的 MPM 类型:
command
a2query -M
event
输出显示此服务器使用 event
MPM。您的安装可能有多个可供选择,但只能选择一个。
虚拟主机文件
默认虚拟主机声明可以在名为 000-default.conf
的文件中找到,该文件位于 sites-available/
目录中。您可以通过检查此文件来了解虚拟主机文件的一般格式。
使用以下命令打开文件:
command
sudo nano /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
...
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
...
ErrorLog ${APACHE LOG DIR}/error.log
CustomLog ${APACHE LOG DIR}/access.log combined
...
默认虚拟主机配置为处理端口 80
上的任何请求,即标准 HTTP 端口。这在声明头部中定义为 *:80
,表示任何接口上的端口 80
。
但这并不意味着它一定会处理此端口上的服务器的每个请求。Apache 使用最匹配请求的最具体的虚拟主机定义。如果有更具体的定义,它可能会取代此定义。检查完文件后,您可以按 CTRL+X
来关闭它。
虚拟主机配置选项
以下选项设置在虚拟主机定义之外的任何其他较低级别子声明中。它们适用于整个虚拟主机。
首先,打开 conf-available/
目录中的 security.conf
文件:
command
sudo nano /etc/apache2/conf-available/security.conf
该文件包含 Server Signature
指令,允许您指定在服务器出现问题时应使用的联系电子邮件。您可以将默认选项从 On
更改为 EMail
以显示服务器管理员电子邮件地址。如果您调整此设置,请确保愿意接收邮件:
...
ServerSignature EMail
...
按 CTRL+X
退出文件。编辑配置文件后,会提示您确认更改。按 Y
保存更改到文件,按 N
放弃更改。
在虚拟主机文件中,您可以添加 ServerName
指令,指定此请求应处理的域名或 IP 地址。这是可以为虚拟主机添加特定性的选项,允许它覆盖默认定义,如果匹配 ServerName
值的话。
运行以下命令打开您的虚拟主机文件,确保将 your_domain
变量替换为您的实际域名:
command
sudo nano /etc/apache2/sites-available/your_domain.conf
将 your_domain
追加到 ServerName
指令:
...
ServerName your_domain
...
同样,您还可以使用 ServerAlias
指令使虚拟主机适用于多个名称。这提供了访问相同内容的备用路径。一个很好的用例是添加相同的域名,前面加上 www
:
...
ServerAlias www.your_domain.com
...
DocumentRoot
指令指定此虚拟主机请求的内容将位于何处。在 Ubuntu 上,默认虚拟主机设置为从 /var/www/
目录提供内容:
...
DocumentRoot /var/www/your_domain/public_html
...
目录定义
在虚拟主机定义中,有关服务器如何处理文件系统中的不同目录的定义。Apache 将按照从最短到最长的顺序应用所有这些方向,因此再次有机会覆盖先前的选项。
使用以下命令打开 apache2.conf
文件:
command
sudo nano /etc/apache2/apache2.conf
...
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
...
第一个目录定义适用于 /
或 root 目录。这将为您的虚拟主机提供基线配置,因为它适用于文件系统上提供的所有文件。请注意此文件中包含的目录配置选项以及一些有用的注释。此默认配置拒绝对所有内容的访问,除非在后续目录定义中另有规定。
Require
指令可以限制或打开服务器内不同资源的访问。
AllowOverride
指令用于决定是否允许 .htaccess
文件覆盖设置,如果它放置在内容目录中。默认情况下不允许,但在各种情况下启用它可能很有用。
检查完文件内容后,您可以按 CTRL+X
来关闭它。
别名和 ScriptAlias 语句
有时目录定义前会有 Alias
或 ScriptAlias
指令。
使用以下命令打开您的虚拟主机配置文件,并将 your_domain
变量替换为您的域名:
command
sudo nano /etc/apache2/sites-available/your_domain.conf
Alias
指令将 URL 路径映射到目录路径。例如,在处理对 your_domain
的请求的虚拟主机中,以下内容将允许在导航到 your_domain.com/content/
时访问 /usr/local/apache/content/
中的内容:
Alias "/content/" "/usr/local/apache/content/"
ScriptAlias
指令以相同的方式操作,但用于定义其中包含可执行组件的目录:
ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"
请记得按照前一节中讨论的方式定义具有访问权限的目录。完成文件的编辑后,按 CTRL+X
退出文件。如果对此文件进行了任何更改,请按 Y
保存更改到文件中,或按 N
保持文件在进行任何更改之前的状态。
启用站点和模块
一旦您有一个满足您要求的虚拟主机文件,您可以使用 Apache 提供的工具将其转换为实时网站。
要在 sites-enabled
目录中为 sites-available
目录中的现有文件创建符号链接,请发出以下命令。确保将 your_domain
替换为您自己的虚拟主机站点配置文件的名称:
command
sudo a2ensite your_domain
启用站点后,发出以下命令告诉 Apache 重新加载其配置文件,以使更改生效:
command
sudo systemctl restart apache2
还有一个用于禁用虚拟主机的伴侣命令。它通过从 sites-enabled
目录中删除符号链接来操作。例如,启用了您的虚拟主机站点后,您可以禁用默认的 000-default
站点:
command
sudo a2dissite 000-default
模块可以通过使用 a2enmod
和 a2dismod
命令来启用或禁用。它们的工作方式与 a2ensite
和 a2dissite
命令的版本相同。例如,要启用 info
模块,您可以使用以下命令:
command
sudo a2enmod info
同样,您可以使用 a2dismod
命令禁用模块:
command
sudo a2dismod info
在修改配置文件并启用或禁用模块后,请记得重新启动 Apache。
结论
Apache 非常灵活和模块化,因此根据您的设置,配置需求会有所不同。
通过上面的一些常见用例,您应该对主要配置文件的用途以及它们之间的交互有了很好的理解。如果您需要了解特定的配置选项,提供的文件都有很好的注释,而 Apache 也提供了出色的文档。希望现在配置文件不再那么令人生畏,您会感到更舒适地进行实验和修改以满足您的需求。