如何在 Ubuntu 或 Debian VPS 上配置 Apache 网络服务器

介绍

Apache 是互联网上最受欢迎的网页服务器之一. 它用于服务超过一半的所有活跃的网站. 虽然有很多可行的网页服务器将为您的内容提供服务,但由于它的普遍性,了解Apache 是如何工作的是有帮助的。

本文将研究一些一般的配置文件以及可以控制它们中的选项. 本文将遵循Ubuntu/Debian的Apache文件布局,这与其他分布如何构建配置等级不同。

前提条件

在您开始探索 Apache 配置之前,您应该在您的服务器上安装 Apache。您可以通过遵循我们的教程(https://andsky.com/tech/tutorials/how-to-install-the-apache-web-server-on-ubuntu-20-04)或教程(https://andsky.com/tech/tutorials/how-to-install-the-apache-web-server-on-debian-10)来了解如何在 Debian 10 上安装 Apache Web Server。

Apache 文件等级

Apache 将其主要配置文件保存在 /etc/apache2 文件夹中. 执行以下命令将列出该文件夹中的所有文件:

1ls -f /etc/apache2
1[secondary_label Output]
2envars sites-available . apache2.conf .. sites-enabled mods-available ports.conf magic mods-enabled conf-enabled conf-available

该目录中有许多文本文件和一些子目录. 这里有一些有用的位置要熟悉:

  • apache2.conf: 这是服务器的主要配置文件 。 几乎所有的配置都可以从这个文件中完成,虽然建议使用单独的,指定的文件来简化. 此文件将配置默认并成为服务器读取配置细节的中心访问点 。
  • `ports.conf': 此文件用于指定虚拟主机应该收听的端口 。 如果您正在配置 SSL , 请确认此文件正确 。
  • 可用站点/可用站点/: " 站点可用 " 目录包含虚拟主机文件配置。 此文件夹中的配置将确定哪些内容获得服务 。 通过与网站启用目录的链接,实现了这一功能,该目录储存了已激活的虚拟主机配置文件。 当Apache开始或重新装入时,它会从sites-upleed目录内读取配置文件和链接,因为它会编译一个完整的配置.
  • 可提供/可提供/: 这些目录屋配置片段未与虚拟主机配置文件相接.
  • 模块化/'和可用模块化/': 这些目录定义了可以选择加载的模块. 目录包含两个组成部分:以.load'结尾的文件,其中包含装入特定模块的碎片;以.conf'结尾的文件,其中存储这些模块的配置。 .

Apache配置不是在单个单一文件中进行的,而是通过模块化设计进行的,可以根据需要添加和修改新文件。

探索 Apache2.conf 文件

您的 Apache 服务器的主要配置细节存储在 /etc/apache2/apache2.conf 文件中。

  • 全球 Apache 服务器流程的配置 * 默认服务器的配置 * 虚拟主机的配置。

使用您喜爱的文本编辑器打开此文件. 下面的示例使用nano:

1sudo nano /etc/apache2/apache2.conf

在Ubuntu和Debian中,这个文件用于配置全球定义,默认服务器和虚拟主机的配置是通过使用包括指令来处理的。

这些指令加载模块定义、port.conf 文档、在conf-enabled/目录中的特定配置文件以及在sites-enabled/目录中的虚拟主机定义:

 1[label /etc/apache2/apache2.conf]
 2
 3IncludeOptional mods-enabled/*.load
 4IncludeOptional mods-enabled/*.conf
 5
 6Include ports.conf
 7
 8IncludeOptional conf-enabled/*.conf
 9
10IncludeOptional sites-enabled/*.conf

全球配置

有几个选项,您可能希望在全球配置中修改:

时间

默认情况下,这个参数设置为300。这意味着服务器有最多300秒的时间来完成每个请求,这个参数可以安全地降低到3060之间。

保持活着

如果设置为启用,此选项将允许每个连接保持开放,以处理来自同一个客户端的多个请求。

MaxKeepAlive请求

这控制了每个连接在死亡之前将处理多少个单独请求。保持这个数字高将使Apache能够更有效地为每个客户端提供内容。默认设置为100。

保持时光

此设置指定了在完成最后一个请求后等待下一个请求需要多长时间。如果达到时限,则连接会死亡。这意味着下次请求内容时,服务器将建立新的连接,以处理构成客户端正在访问的页面的内容请求。

在检查此配置文件的内容后,您可以通过按CTRL+X来关闭它。

多处理模块

多处理模块(MPM)扩展了Apache的模块化设计。MPM负责听取、导向和处理不同的网络请求。

1apache2 -L
 1[secondary_label Output]
 2Compiled in modules:
 3  core.c
 4  mod_so.c
 5  mod_watchdog.c
 6  http_core.c
 7  mod_log_config.c
 8  mod_logio.c
 9  mod_version.c
10  mod_unixd.c

您可以通过a2query -M命令在您的服务器上检查MPM类型:

1a2query -M
1[secondary_label Output]
2event

输出显示在这个服务器上使用事件 MPM. 您的安装可能有多个可供选择,但只能选择一个。

虚拟主机文件

默认的虚拟主机声明可以在sites-available/目录中的名为000-default.conf的文件中找到。

用以下命令打开文件:

1sudo nano /etc/apache2/sites-available/000-default.conf
1[label /etc/apache2/sites-available/000-default.conf]
2<VirtualHost *:80>
3
4ServerAdmin webmaster@localhost
5DocumentRoot /var/www/html
6
7ErrorLog ${APACHE LOG DIR}/error.log
8CustomLog ${APACHE LOG DIR}/access.log combined
9

默认虚拟主机的配置是为了处理标准HTTP端口 " 80 " 上的任何请求。 这一点在声明页头中加以界定,上面写到:::::80',意思是任何界面上的 " 80 " 口。 然而,这并不意味着它必然会在这个端口处理对服务器的每个请求. Apache使用与请求相匹配的最具体的虚拟主机定义. 如果有更具体的定义,它可以取代这一定义。 在检查文件后,您可以按 CTRL+X> 关闭.

虚拟主机配置选项

以下选项在虚拟主机定义中设定,不包括任何其他低级别子声明. 它们适用于整个虚拟主机. 要开始,请在conf-available/目录中打开security.conf文件:

1sudo nano /etc/apache2/conf-available/security.conf

此文件包含服务器签名指令,允许您指定应在服务器出现问题时使用的联系电子邮件。您可以将默认选项从启用更改为电子邮件,以揭示服务器管理电子邮件地址。

1[label /etc/apache2/conf-available/security.conf]
23ServerSignature EMail
4

在编辑配置文件后,一个提示将要求您确认您的更改. 按Y将更改保存到您的文件或按N将其删除。

在虚拟主机文件中,您可以添加一个ServerName指令,指定该请求应该处理的域名或IP地址。

运行以下命令来打开虚拟主机文件,确保将your_domain变量替换为您的实际域名:

1sudo nano /etc/apache2/sites-available/your_domain.conf

添加your_domainServerName指令:

1[label /etc/apache2/sites-available/your_domain.conf]
23ServerName your_domain
4

同样,你也可以通过使用ServerAlias指令来使虚拟主机应用于多个名称,这为访问相同内容提供了替代途径。

1[label /etc/apache2/sites-available/your_domain.conf]
23ServerAlias www.your_domain.com
4

在Ubuntu,默认的虚拟主机设置为从 /var/www/目录中提供内容:

1[label /etc/apache2/sites-available/your_domain.conf]
2
3DocumentRoot /var/www/your_domain/public_html
4

目录定义

在虚拟主机定义中,服务器是如何处理文件系统中的不同目录的定义,Apache将从最短到最长的顺序应用所有这些方向,所以有机会再次取代以前的选项。

使用此命令打开 apache2.conf 文件:

1sudo nano /etc/apache2/apache2.conf
 1[label /etc/apache2/apache2.conf]
 2
 3<Directory />
 4        Options FollowSymLinks
 5        AllowOverride None
 6        Require all denied
 7</Directory>
 8
 9<Directory /usr/share>
10        AllowOverride None
11        Require all granted
12</Directory>
13
14<Directory /var/www/>
15        Options Indexes FollowSymLinks
16        AllowOverride None
17        Require all granted
18</Directory>
19

第一个目录定义适用于 /,或 root,目录的规则. 这将为您的虚拟主机提供基线配置,因为它适用于文件系统上服务的所有文件。请注意目录配置选项,以及其中包含的一些有用的评论。

要求指令可以限制或打开服务器内部的不同资源的访问权限。 允许转移指令用于决定如果一个.htaccess 文件被放置在内容目录中,是否可以转移设置。 默认情况下,这不允许,但在各种情况下可以有用。 检查此文件的内容后,您可以通过按CTRL+X来关闭它。

Alias 和 ScriptAlias 声明

目录定义有时会被AliasScriptAlias指令所提前。 使用此命令打开虚拟主机配置文件,并用您的域名替换your_domain变量:

1sudo nano /etc/apache2/sites-available/your_domain.conf

例如,在处理your_domain请求的虚拟主机中,下列情况将允许在导航到your_domain.com/content/时访问/usr/local/apache/content/内的内容:

1[label /etc/apache2/sites-available/your_domain.conf]
2Alias “/content/” “/usr/local/apache/content/”

ScriptAlias指令以相同的方式运作,但用于定义将有可执行组件的目录:

1[label /etc/apache2/sites-available/your_domain.conf]
2ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"

请记住定义与访问权限的目录,如前一节所讨论的。完成文件的编辑后,通过按CTRL+X离开文件. 如果你对该文件做了任何更改,请按Y将更改保存到您的文件或按N将文件留在任何配置更改之前。

允许网站和模块

一旦你有一個符合你的需求的虛擬主機檔案,你可以使用與 Apache 所包含的工具將其轉換為實際網站。 要在「Sites-enabled」目錄中建立一個符號連結到「Sites-enabled」目錄中的現有檔案,請發出下列命令。

1sudo a2ensite your_domain

启用网站后,发出以下命令,告诉 Apache 重新加载配置文件,允许更改传播:

1sudo systemctl restart apache2

还有一种伴侣命令来禁用虚拟主机. 它通过从网站启用目录中删除符号链接来操作。 例如,当您的虚拟主机网站启用时,您可以禁用默认的000默认网站:

1sudo a2dissite 000-default

模块可以通过分别使用a2enmoda2dismod命令启用或禁用,它们以与这些命令的a2ensitea2dissite版本相同的方式工作。

1sudo a2enmod info

同样,您可以使用a2dismod命令禁用一个模块:

1sudo a2dismod info

请记住在修改配置文件和启用或禁用模块后重新启动 Apache。

结论

Apache是多能的,而且非常模块化,所以配置需求会因你的设置而不同. 在对上面的一些一般用途案例进行审查后,你应当很好地了解主要配置文件用于什么,以及它们如何相互作用. 如果您需要了解具体的配置选项,则所提供的文件会得到很好的评论并[Apache提供出色的文档] (https://httpd.apache.org/docs/). 希望配置文件不会像现在这样令人恐惧.

Published At
Categories with 技术
comments powered by Disqus