介绍
Apache是互联网上最流行的Web服务器之一。它用于为超过一半的活跃网站提供服务。虽然有许多可行的Web服务器可以为您提供内容,但了解Apache的工作原理是很有帮助的,因为它的普及率很高。
本文将审查一些通用的配置文件以及可以在其中控制的选项。本文将遵循Ubuntu/Debian文件的布局,这与其他发行版构建的配置层次结构不同。
先决条件
如果您使用的是Ubuntu 16.04或更低版本,则建议您升级到更高版本,因为Ubuntu不再为这些版本提供支持。这个指南集合将帮助您升级Ubuntu版本。
-
运行Ubuntu的服务器,以及一个具有
sudo
权限和活动防火墙的非root用户。有关如何设置这些内容的指导,请从此列表中选择您的发行版,并按照我们的初始服务器设置指南进行操作。 -
在开始探索您的Apache配置之前,您应该在服务器上安装了Apache。您可以按照我们的“在Ubuntu上安装Apache Web服务器”的教程学习如何操作,适用于 22.04 / 20.04 / 18.04 版本,或者参考 在Debian 10上安装Apache Web服务器 的教程。
在Ubuntu上配置Apache Web服务器的5个步骤
步骤1:Apache文件层次结构
Apache将其主要配置文件存放在/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 配置不是在单个庞大的文件中进行的,而是通过模块化设计进行的,可以根据需要添加和修改新文件。
步骤 2:探索 Apache2.conf 文件
你的 Apache 服务器的主要配置详情存储在 /etc/apache2/apache2.conf
文件中。
这个文件分为三个主要部分:
- 全局 Apache 服务器进程的配置
- 默认服务器的配置
- 虚拟主机的配置。
用你喜欢的文本编辑器打开这个文件。以下示例使用了 nano
:
在 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
步骤 3:设置 Apache 全局配置
在全局配置中,有一些选项您可能想要修改:
Timeout
默认情况下,此参数设置为300
。这意味着服务器最多有 300 秒来完成每个请求。
此参数可以安全地降低到30
到60
秒之间。
KeepAlive
如果设置为On
,将允许每个连接保持打开状态,以处理同一客户端的多个请求。
如果设置为Off
,则每个请求都将需要建立一个新的连接,这可能会导致根据您的设置和流量情况产生重大开销。
MaxKeepAliveRequests
这控制每个连接在终止之前将处理多少个单独的请求。保持这个数字较高将允许Apache更有效地为每个客户端提供内容。
默认设置为100
。将此值设置为0
将允许Apache为每个连接提供无限数量的请求。
KeepAliveTimeout
此设置指定在完成上一个请求后等待下一个请求的时间。如果达到超时阈值,则连接将终止。
这意味着下一次请求内容时,服务器将建立一个新连接来处理客户端正在访问的页面组成的内容的请求。默认设置为5
。
检查完此配置文件的内容后,您可以通过按CTRL+X
关闭它。
多进程模块
A Multi-Processing Module (MPM) extends Apache’s modular design. MPMs are responsible for listening, directing, and handling different network requests. You can cross-reference which section your Apache installation was compiled in with using the following command:
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类型:
Outputevent
输出显示该服务器使用event
MPM。您的安装可能有多个可供选择,但只能选择一个。
步骤4:更新Apache虚拟主机文件
默认虚拟主机声明可以在名为000-default.conf
的文件中找到,位于sites-available/
目录中。您可以通过检查此文件了解虚拟主机文件的一般格式。
使用以下命令打开文件:
<VirtualHost *:80>
…
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
…
ErrorLog ${APACHE LOG DIR}/error.log
CustomLog ${APACHE LOG DIR}/access.log combined
…
默认虚拟主机配置为处理标准HTTP端口80
上的任何请求。这在声明头部中定义,即*:80
,表示任何接口上的端口80
。
但是,这并不意味着它一定会处理该端口上的每个服务器请求。Apache使用最匹配请求的最具体虚拟主机定义。如果存在更具体的定义,它可能会取代此定义。检查文件后,您可以通过按下CTRL+X
关闭它。
Apache虚拟主机配置
以下选项设置在虚拟主机定义中,而不是在任何其他较低级别的子声明中。它们适用于整个虚拟主机。
首先,打开conf-available/
目录中的security.conf
文件:
该文件包含Server Signature
指令,允许您指定在服务器出现问题时应使用的联系电子邮件。您可以将默认选项从On
更改为EMail
以显示服务器管理员电子邮件地址。如果您调整了此设置,请确保愿意接收邮件:
…
ServerSignature EMail
…
按CTRL+X
退出文件。编辑配置文件后,会提示您确认更改。按Y
保存更改到文件中,或按N
放弃更改。
在虚拟主机文件中,您可以添加一个ServerName
指令,指定此请求应处理的域名或IP地址。如果与ServerName
值匹配,此选项将为虚拟主机添加特定性,从而允许其覆盖默认定义。
运行以下命令打开您的虚拟主机文件,确保用您的实际域名替换your_domain
变量:
将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
文件:
…
<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>
…
第一个目录定义适用于/
或根目录的规则。这将为您的虚拟主机提供基线配置,因为它适用于文件系统上提供的所有文件。请注意此文件中包含的目录配置选项以及一些有用的注释。此默认配置拒绝对所有内容的访问,除非在随后的目录定义中另有规定。
Require
指令可以限制或开放服务器内不同资源的访问。
AllowOverride
指令用于决定是否允许 .htaccess
文件覆盖内容目录中的设置。默认情况下不允许此操作,但在各种情况下启用它可能会很有用。
检查完此文件的内容后,您可以通过按下 CTRL+X
来退出它。
别名和 ScriptAlias 语句
有时目录定义前面会有 Alias
或 ScriptAlias
指令。
使用此命令打开您的虚拟主机配置文件,并将 your_domain
变量替换为您的域名:
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
保留文件在更改配置之前的状态。
步骤5:启用站点和模块
一旦您拥有满足要求的虚拟主机文件,您可以使用Apache附带的工具将其转换为实时网站。
要在sites-enabled
目录中创建到sites-available
目录中现有文件的符号链接,请执行以下命令。确保用您自己的虚拟主机站点配置文件的名称替换your_domain
:
启用站点后,发出以下命令告知Apache重新加载其配置文件,从而允许更改传播:
还有一个用于禁用虚拟主机的伴随命令。它通过从sites-enabled
目录中移除符号链接来运作。例如,如果您的虚拟主机站点已启用,您可以禁用默认的000-default
站点:
模块可以通过使用 a2enmod
和 a2dismod
命令来启用或禁用。它们的工作方式与这些命令的 a2ensite
和 a2dissite
版本相同。例如,要启用 info
模块,您可以使用以下命令:
同样,您可以使用 a2dismod
命令禁用模块:
记得在修改配置文件并启用或禁用模块后重新启动 Apache。
结论
Apache 是多功能且非常模块化的,因此根据您的设置,配置需求会有所不同。
在上面审查了一些常见用例之后,您应该对主要配置文件的用途以及它们如何相互交互有所了解。如果您需要了解特定的配置选项,提供的文件都有很好的注释,而且 Apache 提供了出色的文档。希望现在配置文件不会再让您感到害怕,您会更加愿意尝试和修改以满足您的需求。