本教程的先前版本由Melissa Anderson编写
介绍
在Ubuntu上, Apache Web服务器将其文档存储在/var/www/html
,该文件通常位于具有操作系统其余部分的根文件系统上。 但有时,将文档根移动到另一个位置(例如单独安装的文件系统)会很有帮助。 例如,如果您从同一个Apache实例提供多个网站,则将每个网站的文档根目录放在其自己的卷上,这样您就可以根据特定网站或客户端的需求进行扩展。
在本指南中,您将Apache文档根目录移动到新位置。
先决条件
要完成本指南,您需要:
- Ubuntu 18.04服务器和具有sudo权限的非root用户。 您可以在使用Ubuntu 18.04指南的初始服务器设置中了解有关如何使用这些权限设置用户的更多信息。
- 按照如何在Ubuntu 18.04上安装Apache Web服务器安装Apache 。
- 在Ubuntu 18.04上如何使用Let的加密保护Apache后,为您的域配置了SSL。 我们将在本教程中使用域名example.com ,但您应将其替换为您自己的域名。
- 文档根目录的新位置。 在本教程中,我们将使用
/mnt/volume-nyc3-01
目录作为新位置。 如果您在DigitalOcean上使用Block Storage, 本指南将向您展示如何创建和附加您的卷。 但是,您的新文档根位置可根据您的需要进行配置。 如果要将文档根目录移动到其他存储设备,则需要在设备的挂载点下选择一个位置。
第1步 - 将文件复制到新位置
在全新安装Apache时,文档根目录位于/var/www/html
。 但是,通过遵循先决条件指南,您创建了一个新文档根目录/var/www/ example.com /html
。 您可能还在相应的VirtualHost
指令中有其他文档根。 在此步骤中,我们将建立文档根目录的位置,并将相关文件复制到新位置。
您可以使用grep
搜索文档根目录的位置。 让我们在/etc/apache2/sites-enabled
目录中搜索,将我们的焦点限制在活动站点上。 -R
标志确保grep
将在其输出中打印DocumentRoot
和完整文件名:
grep -R "DocumentRoot" /etc/apache2/sites-enabled
如果您在新服务器上遵循先决条件教程,结果将如下所示:
Output/etc/apache2/sites-enabled/example.com-le-ssl.conf: DocumentRoot /var/www/example.com/html
/etc/apache2/sites-enabled/example.com.conf: DocumentRoot /var/www/example.com/html
如果您有预先存在的设置,则结果可能与此处显示的不同。 在任何一种情况下,您都可以使用grep
的反馈来确保移动所需的文件并更新相应的配置文件。
现在您已确认文档根目录的位置,您可以使用rsync
将文件复制到新位置。 使用-a
标志保留权限和其他目录属性,而-v
提供详细输出,以便您可以跟踪同步的进度:
注意:确保目录上没有尾部斜杠,如果使用制表符完成,则可以添加斜杠。 当有斜杠时, rsync
会将目录的内容转储到挂载点,而不是将其转移到包含的html
目录中。
sudo rsync -av /var/www/example.com/html /mnt/volume-nyc3-01
您将看到如下输出:
Outputsending incremental file list
html/
html/index.html
sent 318 bytes received 39 bytes 714.00 bytes/sec
total size is 176 speedup is 0.49
有了我们的文件,让我们继续修改我们的Apache配置以反映这些变化。
第2步 - 更新配置文件
Apache使用全局和站点特定的配置文件。 有关配置文件层次结构的背景知识,请参阅如何在Ubuntu或Debian VPS上配置Apache Web服务器 。 我们将修改example.com
项目的虚拟主机文件 : /etc/apache2/sites-enabled/ example.com .conf
和/etc/apache2/sites-enabled/ example.com -le-ssl.conf
,这是我们为example.com
配置SSL证书时创建。
注意:请记住,在您的情况下, example.com
将是your_domain_name
,并且您将修改在第1步中运行grep
命令时输出的虚拟主机文件。
首先打开/etc/apache2/sites-enabled/ example.com .conf
:
sudo nano /etc/apache2/sites-enabled/example.com.conf
找到以DocumentRoot
开头的行,并使用新的根位置更新它。 在我们的例子中,这将是/mnt/volume-nyc3-01/html
:
<VirtualHost *:80>
ServerAdmin sammy@example.comn
ServerName example.com
ServerAlias www.example.com
DocumentRoot /mnt/volume-nyc3-01/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.example.com [OR]
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
我们还添加指令以确保服务器将遵循目录中的符号链接:
. . .
<Directory /mnt/volume-nyc3-01/html>
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
请密切关注第1步中输出的grep
DocumentRoot
,包括别名或重写。 您还需要更新这些内容以反映新文档的根位置。
保存这些更改后,让我们将注意力转向SSL配置。 打开/etc/apache2/sites-enabled/ example.com -le-ssl.conf
:
sudo nano /etc/apache2/sites-enabled/example.com-le-ssl.conf
修改DocumentRoot
以反映新位置/mnt/volume-nyc3-01/html
:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin sammy@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /mnt/volume-nyc3-01/html
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
如果要取消顶行,只需在/etc/apache2/apache2.conf
向主(全局)Apache配置文件添加ServerName
指令。 ServerName
可以是您的服务器的域或IP地址。 但这只是一条消息,不会影响您网站的功能。 只要输出包含Syntax OK
,您就可以继续了。
使用以下命令重新启动Apache:
sudo systemctl reload apache2
服务器重新启动后,请访问受影响的站点并确保它们按预期工作。 一旦您感到满意,一切都井然有序,不要忘记删除数据的原始副本。
结论
在本教程中,我们介绍了如何将Apache文档根目录更改为新位置。 这可以帮助您进行基本的Web服务器管理,例如在单个服务器上有效托管多个站点。 它还允许您利用其他存储设备,例如网络块存储,这是在需求变化时扩展网站的重要步骤。
如果您正在管理繁忙或不断增长的网站,您可能有兴趣了解如何在生产中遇到它们之前加载测试Web服务器以识别性能瓶颈。 您还可以在这五种方法的比较中了解有关改进生产体验的更多信息, 以改进您的生产Web应用程序服务器设置 。