如何在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.conf
。 ServerName
可以是您服务器的域或 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 服务器管理,例如在单个服务器上有效地托管多个站点。 它还允许您利用网络块存储等替代存储设备,这有助于随着网站需求的变化而扩展网站。