介绍
Apache 是 Internet 上最流行的 Web 服务器之一。 它用于为所有活动网站的一半以上提供服务。 尽管有许多可行的 Web 服务器可以为您的内容提供服务,但了解 Apache 的工作原理是有帮助的,因为它无处不在。
本文将检查一些通用配置文件以及可以在其中控制的选项。 本文将遵循 Apache 文件的 Ubuntu/Debian 布局,这与其他发行版构建配置层次结构的方式不同。
先决条件
在开始探索 Apache 配置之前,您应该在服务器上安装 Apache。 您可以按照我们的 如何在 Ubuntu 20.04 上安装 Apache Web 服务器教程或 如何在 Debian 10 上安装 Apache Web 服务器教程来了解如何。
Apache 文件层次结构
Apache 将其主要配置文件保存在 /etc/apache2
文件夹中。 执行以下命令将列出该文件夹中的所有文件:
ls -f /etc/apache2
Outputenvars 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
:
sudo nano /etc/apache2/apache2.conf
在 Ubuntu 和 Debian 中,此文件用于配置全局定义。 默认服务器和虚拟主机的配置使用 Include
指令处理。 Include
指令允许 Apache 在语句出现的位置将其他配置文件读入当前文件。 结果是 Apache 在启动时动态生成一个总体配置文件。
在该文件中可以找到许多不同的 Include
和 IncludeOptional
语句。 这些指令加载模块定义、ports.conf
文档、conf-enabled/
目录下的具体配置文件、sites-enabled/
目录下的虚拟主机定义:
/etc/apache2/apache2.conf
… IncludeOptional mods-enabled/*.load IncludeOptional mods-enabled/*.conf … Include ports.conf … IncludeOptional conf-enabled/*.conf … IncludeOptional sites-enabled/*.conf
全局配置
您可能希望在全局配置中修改一些选项:
超时
默认情况下,此参数设置为 300
。 这意味着服务器最多有 300 秒的时间来完成每个请求。 该参数可以安全地设置在 30
和 60
秒之间。
活着
如果设置为 On
,此选项将允许每个连接保持打开状态以处理来自同一客户端的多个请求。 如果将其设置为 Off
,则每个请求都必须建立一个新连接,根据您的设置和流量情况,这可能会导致大量开销。
MaxKeepAliveRequests
这控制了每个连接在死亡之前将处理多少个单独的请求。 保持这个数字高将使 Apache 能够更有效地为每个客户端提供内容。 默认设置为 100
。 将此值设置为 0
将允许 Apache 为每个连接提供无限数量的请求。
保持活动超时
此设置指定完成最后一个请求后等待下一个请求的时间。 如果达到超时阈值,则连接将终止。 这意味着下次请求内容时,服务器将建立一个新连接来处理对构成客户端正在访问的页面的内容的请求。 默认设置为 5
。
检查此配置文件的内容后,您可以按 CTRL+X
将其关闭。
多处理模块
多处理模块 (MPM) 扩展了 Apache 的模块化设计。 MPM 负责监听、引导和处理不同的网络请求。 您可以使用以下命令交叉引用您的 Apache 安装编译的部分:
apache2 -L
OutputCompiled in modules: 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 类型:
a2query -M
Outputevent
输出显示此服务器上使用了 event
MPM。 您的安装可能有多个可供选择,但只能选择一个。
虚拟主机文件
默认虚拟主机声明可以在 sites-available/
目录中名为 000-default.conf
的文件中找到。 您可以通过检查此文件了解虚拟主机文件的一般格式。
使用以下命令打开文件:
sudo nano /etc/apache2/sites-available/000-default.conf
/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
文件:
sudo nano /etc/apache2/conf-available/security.conf
此文件包含 Server Signature
指令,它允许您指定在出现服务器问题时应使用的联系电子邮件。 您可以将默认选项从 On
更改为 EMail
以显示服务器管理员电子邮件地址。 如果您调整此设置,请确保您愿意接收邮件:
/etc/apache2/conf-available/security.conf
… ServerSignature EMail …
按CTRL+X
退出文件。 编辑配置文件后,系统会提示您确认更改。 按 Y
将更改保存到您的文件或按 N
放弃它们。
在您的虚拟主机文件中,您可以添加一个 ServerName
指令,指定此请求应处理的域名或 IP 地址。 这个选项会增加虚拟主机的特殊性,如果它与 ServerName
值匹配,则允许它覆盖默认定义。
运行以下命令打开您的虚拟主机文件,确保将 your_domain
变量替换为您的实际域名:
sudo nano /etc/apache2/sites-available/your_domain.conf
将 your_domain
附加到 ServerName
指令:
/etc/apache2/sites-available/your_domain.conf
… ServerName your_domain …
同样,您也可以使用 ServerAlias
指令使虚拟主机应用于多个名称。 这提供了获取相同内容的替代路径。 一个很好的用例是添加相同的域,以 www
开头:
/etc/apache2/sites-available/your_domain.conf
… ServerAlias www.your_domain.com …
DocumentRoot
指令指定为此虚拟主机请求的内容将位于何处。 在 Ubuntu 上,默认虚拟主机设置为从 /var/www/
目录提供内容:
/etc/apache2/sites-available/your_domain.conf
… DocumentRoot /var/www/your_domain/public_html …
目录定义
在虚拟主机定义中,有关于服务器如何处理文件系统中不同目录的定义。 Apache 将按照从最短到最长的顺序应用所有这些指示,因此再次有机会覆盖以前的选项。
使用以下命令打开 apache2.conf
文件:
sudo nano /etc/apache2/apache2.conf
/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
将其关闭。
Alias 和 ScriptAlias 语句
目录定义有时前面有 Alias
或 ScriptAlias
指令。 使用此命令打开您的虚拟主机配置文件,并将 your_domain
变量替换为您的域名:
sudo nano /etc/apache2/sites-available/your_domain.conf
Alias
指令将 URL 路径映射到目录路径。 例如,在处理对 your_domain
的请求的虚拟主机中,当导航到 your_domain.com/content/
时,以下内容将允许访问 /usr/local/apache/content/
中的内容:
/etc/apache2/sites-available/your_domain.conf
Alias “/content/” “/usr/local/apache/content/”
ScriptAlias
指令以相同的方式运行,但用于定义其中包含可执行组件的目录:
/etc/apache2/sites-available/your_domain.conf
ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"
请记住定义具有访问权限的目录,如上一节所述。 完成对文件的编辑后,按 CTRL+X
退出文件。 如果您对此文件进行了任何更改,请按 Y
将更改保存到您的文件,或按 N
使文件保持在对配置进行任何更改之前的状态。
启用站点和模块
拥有满足您要求的虚拟主机文件后,您可以使用 Apache 随附的工具将其转换为实时网站。 要在 sites-enabled
目录中创建指向 sites-available
目录中现有文件的符号链接,请发出以下命令。 确保将 your_domain
替换为您自己的虚拟主机站点配置文件的名称:
sudo a2ensite your_domain
启用站点后,发出以下命令告诉 Apache 重新加载其配置文件,从而传播更改:
sudo systemctl restart apache2
还有一个用于禁用虚拟主机的配套命令。 它通过从 sites-enabled
目录中删除符号链接来运行。 例如,启用虚拟主机站点后,您可以禁用默认的 000-default
站点:
sudo a2dissite 000-default
可以分别使用 a2enmod
和 a2dismod
命令启用或禁用模块。 它们的工作方式与这些命令的 a2ensite
和 a2dissite
版本相同。 例如,要启用 info
模块,可以使用以下命令:
sudo a2enmod info
同样,您可以使用 a2dismod
命令禁用模块:
sudo a2dismod info
请记住在修改配置文件并启用或禁用模块后重新启动 Apache。
结论
Apache 用途广泛且非常模块化,因此配置需求将根据您的设置而有所不同。 在回顾了上面的一些一般用例之后,您应该对主要配置文件的用途以及它们之间的交互方式有一个很好的了解。 如果您需要了解具体的配置选项,提供的文件有很好的注释,Apache 提供了优秀的文档。 希望配置文件现在不会那么令人生畏,并且您会更轻松地进行试验和修改以满足您的需求。