如何在Ubuntu20.04上将ApacheWeb根目录移动到新位置

来自菜鸟教程
跳转至:导航、​搜索

介绍

在 Ubuntu 上,Apache Web 服务器默认提供存储在 var/www/html 目录中的文档。 此目录称为 文档根 。 当管理员或用户向服务器发出请求时,它将使用文档根目录中的相应文件进行响应。

该目录通常与操作系统的其余部分一起位于根文件系统上。 但是,有时将文档根目录移动到另一个位置会很有帮助,例如单独安装的文件系统。 例如,如果您从同一个 Apache 实例为多个网站提供服务,则将每个站点的文档根放在自己的卷上,这样您就可以根据特定站点或客户端的需求进行扩展。

在本指南中,您会将 Apache 文档根目录从其默认位置 var/www/html 移动到新位置。

先决条件

要完成本指南,您需要:

  • Ubuntu 20.04 服务器和具有 sudo 权限的非 root 用户。 您可以在我们的 Initial Server Setup with Ubuntu 20.04 指南中了解有关如何设置具有这些权限的用户的更多信息。
  • Apache 安装在您的服务器上。 按照我们的 如何在 Ubuntu 20.04 上安装 Apache Web 服务器指南,了解如何进行设置。
  • 为您的域配置的 SSL。 按照我们的 如何在 Ubuntu 20.04 上使用 Let's Encrypt 保护 Apache 指南进行配置。
  • 文档根目录的新位置。 在本教程中,/mnt/volume_nyc3_01 用作此新位置的目录。 尽管本指南中的说明使用已安装块存储设备的示例,但您可以使用系统上的任何目录位置作为新的文档根来提供 Web 内容。

如果您使用 DigitalOcean 的块存储卷,本指南 将向您展示如何创建和附加您的卷。 您的新文档根位置可根据您的需要进行配置。 如果要将文档根目录移动到不同的存储设备,则需要选择设备安装点下的位置。


第 1 步 — 将文件复制到新位置

如果您遵循了先决条件教程,您将在 /var/www/your_domain 创建一个新的文档根目录。 您还可能在相应的 VirtualHost 指令中有其他文档根。 在将相关文件复制到新位置之前,确定当前文档根目录的位置很重要。

通过使用 grep 命令在 /etc/apache2/sites-enabled 目录中搜索来搜索文档根目录的位置。 这限制了对活动站点的关注。 -R 标志确保 grep 将在输出中打印 DocumentRoot 和完整文件名:

grep -R "DocumentRoot" /etc/apache2/sites-enabled

以下输出显示当前 DocumentRoot 的位置:

Output/etc/apache2/sites-enabled/your_domain-le-ssl.conf:  DocumentRoot /var/www/your_domain
/etc/apache2/sites-enabled/your_domain.conf:         DocumentRoot /var/www/your_domain

如果您有预先存在的设置,您的结果可能与此处显示的不同。 无论哪种情况,您都可以使用 grep 的输出来确保您正在移动所需的文件并更新适当的配置文件。

现在您已确认文档根目录的位置,使用 rsync 将文件复制到新位置:

注意: 使用rsync命令时,请注意两点:

  • 请注意,在 your_domain 之后有 的斜杠。 如果您没有在此处包含尾部斜杠,则您正在将此目录作为子目录复制到新的文档根目录。 例如,您的新文档根目录将具有以下结构:/var/www/mnt/volume_nyc3_01/your_domain。 当尝试从新文档根目录提供 index.html 文件时,这将导致问题。
  • 其次,新文档根目录/mnt/volume_nyc3_01后面有no斜杠。


sudo rsync -av /var/www/your_domain/ /mnt/volume_nyc3_01

-a 标志保留权限和其他目录属性,而 -v 标志提供详细输出,因此您可以跟踪同步的进度。

您的输出应包括以下内容:

Outputsending incremental file list
./
index.html

sent 265 bytes  received 38 bytes  606.00 bytes/sec
total size is 134  speedup is 0.44

准备好文件后,您可以继续修改 Apache 配置以反映这些更改。

第 2 步 — 更新配置文件

在找到文件并将其复制到新文档根目录后,您可以将虚拟主机文件配置为指向此新位置。

首先使用您喜欢的编辑器打开 /etc/apache2/sites-enabled/your_domain.conf。 此示例使用 nano

sudo nano /etc/apache2/sites-enabled/your_domain.conf

找到以 DocumentRoot 开头的行并将其替换为新的根位置。 在本例中,新的根位置是 /mnt/volume_nyc3_01

/etc/apache2/sites-enabled/your_domain.conf

<VirtualHost *:80>
    ServerAdmin sammy@your_domain
    ServerName your_domain
    ServerAlias www.your_domain
    DocumentRoot /mnt/volume_nyc3_01
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.your_domain [OR]
RewriteCond %{SERVER_NAME} =your_domain
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

在此 <VirtualHost> 指令之后,添加这些突出显示的行以确保服务器将遵循目录中的符号链接:

/etc/apache2/sites-enabled/your_domain.conf

. . .
</VirtualHost>

<Directory /mnt/volume_nyc3_01>
    Options FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

总之,您的 /etc/apache2/sites-enabled/your_domain.conf 文件应包含以下所有特定于您的新 DocumentRoot 位置的行:

/etc/apache2/sites-enabled/your_domain.conf

<VirtualHost *:80>
    ServerAdmin sammy@your_domain
    ServerName your_domain
    ServerAlias www.your_domain
    DocumentRoot /mnt/volume_nyc3_01
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.your_domain [OR]
RewriteCond %{SERVER_NAME} =your_domain
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<Directory /mnt/volume_nyc3_01>
    Options FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

保存并退出编辑器。 您可以按 CTRL + X,然后按 Y,然后按 ENTER 退出 nano

进行这些更改后,您可以将注意力转向 SSL 配置。 打开/etc/apache2/sites-enabled/your_domain-le-ssl.conf文件:

sudo nano /etc/apache2/sites-enabled/your_domain-le-ssl.conf

和之前的配置文件一样,修改 DocumentRoot 以反映新的位置:

/etc/apache2/sites-enabled/your_domain-le-ssl.conf

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin sammy@your_domain
    ServerName your_domain
    ServerAlias www.your_domain
    DocumentRoot /mnt/volume_nyc3_01
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
. . .
</VirtualHost>
</IfModule>

保存并关闭此文件。

您现在已经进行了必要的配置更改以反映文档根目录的新位置。

第 3 步 - 重新启动 Apache

完成更改后,您可以重新启动 Apache 并测试结果。

首先,确保新配置的语法与 configtest 是正确的:

sudo apachectl configtest

如果您的语法正确,您的输出应显示以下内容:

OutputAH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK

注意: 如果你想抑制这个输出中的第一行,在你的全局 Apache 配置文件中添加一个 ServerName 指令到 /etc/apache2/apache2.confServerName 可以是您服务器的域或 IP 地址。

使用编辑器打开文件:

sudo nano /etc/apache2/apache2.conf

ServerName 指令放在带有 your_domain 或服务器 IP 地址的配置文件的底部:

/etc/apache2/apache2.conf

# This is the main Apache server configuration file.  It contains the
# configuration directives that give the server its instructions.
# See http://httpd.apache.org/docs/2.4/ for detailed information about
# the directives and /usr/share/doc/apache2/README.Debian about Debian specific
# hints.
...

ServerName your_domain

保存并退出编辑器。

但是,这只是一条消息,不会影响您网站的功能。 只要输出包含 Syntax OK,就可以继续。


使用以下命令重新启动 Apache:

sudo systemctl reload apache2

服务器重新启动后,请访问受影响的站点以确保它们按预期工作。 一旦您对一切都井井有条感到满意,请不要忘记删除数据的原始副本:

sudo rm -Rf /var/www/your_domain

您现在已成功将 Apache 文档根目录移动到新位置。

结论

在本教程中,您学习了如何将 Apache 文档根目录更改为新位置。 这可以帮助您进行基本的 Web 服务器管理,例如在单个服务器上有效地托管多个站点。 它还允许您利用网络块存储等替代存储设备,这有助于随着网站需求的变化而扩展网站。