介绍
在Ubuntu上,Nginx web服务器将其文档存储在/var/www/html
中,通常位于根文件系统上,与操作系统的其余部分一起。但有时,将文档根目录移动到另一个位置会很有帮助,例如,将其放在单独的挂载文件系统上。例如,如果您从同一个Nginx实例提供多个网站服务,将每个站点的文档根目录放在自己的卷上允许您根据特定站点或客户的需求进行扩展。
在本指南中,您将把Nginx文档根目录移动到新位置。
先决条件
要完成本指南,您需要:
- 一个Ubuntu 22.04服务器和一个具有sudo权限的非root用户。您可以在我们的使用Ubuntu 22.04进行初始服务器设置指南中了解如何设置具有这些权限的用户。
- Nginx 已安装,遵循在 Ubuntu 22.04 上安装 Nginx 的步骤。
- A TLS/SSL certificate configured for your server. You have three options:
- 您可以按照如何在 Ubuntu 22.04 上使用 Let’s Encrypt 保护 Nginx的步骤免费获取证书。
- 您还可以按照如何在 Ubuntu 22.04 中为 Nginx 创建自签名 SSL 证书的步骤生成和配置自签名证书。
- 您也可以从其他提供商那里购买一个证书,然后按照如何在 Ubuntu 22.04 中为 Nginx 创建自签名 SSL 证书的第 3 和第 4 步来配置 Nginx 使用它。
本教程中我们将使用域名your_domain,但您应该将其替换为您自己的域名。
- A new location for your document root. In this tutorial, we will use the
/mnt/volume-nyc3-01
directory for our new location. If you are using Block Storage on DigitalOcean, this guide will show you how to create and attach your volume. Your new document root location is configurable based on your needs, however. If you are moving your document root to a different storage device, you will want to select a location under the device’s mount point.
步骤 1 —— 复制文件到新位置
在 Nginx 的全新安装中,文档根目录位于 /var/www/html
。但是,通过遵循先决条件指南,您创建了一个新的文档根目录 /var/www/your_domain/html
。您可能还有其他文档根目录。在这一步中,我们将确定文档根目录的位置,并将相关文件复制到其新位置。
您可以使用 grep
来搜索文档根目录的位置。让我们在 /etc/nginx/sites-enabled
目录中进行搜索,以将焦点限制在活动站点上。-R
标志确保 grep
将在其输出中打印包含 root
指令的行以及完整的文件名:
如果您在全新服务器上遵循了先决条件教程,则结果将如下所示:
Output/etc/nginx/sites-enabled/your_domain: root /var/www/your_domain/html;
/etc/nginx/sites-enabled/default: root /var/www/html;
/etc/nginx/sites-enabled/default: # deny access to .htaccess files, if Apache's document root
/etc/nginx/sites-enabled/default:# root /var/www/your_domain;
如果您有预先存在的设置,则您的结果可能与此处显示的不同。无论哪种情况,您都可以使用 grep
的反馈来确保您正在移动所需的文件并更新适当的配置文件。
现在您已确认文档根目录的位置,您可以使用 rsync
将文件复制到其新位置。使用 -a
标志可以保留权限和其他目录属性,而 -v
则提供详细的输出,以便您可以跟踪同步的进度:
注意: 确保目录末尾没有斜杠,如果使用制表符补全,可能会添加斜杠。当有斜杠时,rsync
将目录的内容转储到挂载点而不是传输到包含的html
目录中。
你将看到如下输出:
Outputsending incremental file list
created directory /mnt/volume-nyc3-01
html/
html/index.html
sent 318 bytes received 39 bytes 714.00 bytes/sec
total size is 176 speedup is 0.49
文件就位后,让我们继续修改 Nginx 配置以反映这些更改。
步骤 2 — 更新配置文件
Nginx 使用全局和站点特定的配置文件。我们将修改您的your_domain
项目的服务器块文件:/etc/nginx/sites-enabled/your_domain
。
注意:请记得用您的域名替换your_domain
,并且您将修改在执行步骤 1 中运行grep
命令时输出的服务器块文件。
首先,用编辑器打开/etc/nginx/sites-enabled/your_domain
:
找到以root
开头的行,并用新的根目录位置进行更新。在我们的情况下,这将是/mnt/volume-nyc3-01/html
:
server {
root /mnt/volume-nyc3-01/html;
index index.html index.htm index.nginx-debian.html;
. . .
}
. . .
在步骤1中,注意任何其他地方输出原始文档根路径的 grep
,包括别名或重写。您还需要更新这些内容以反映新的文档根位置。当您完成所有必要的更改后,请保存并关闭文件。
完成配置更改后,您可以重新启动 Nginx 并测试结果。
第3步 — 重新启动 Nginx
首先,请确保语法正确:
如果一切正常,它应该返回:
如果测试失败,请找出并修复问题。
Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
一旦测试通过,请重新启动 Nginx:
服务器重新启动后,请访问受影响的站点,并确保它们按预期工作。一切都正常后,请不要忘记删除原始数据的副本:
您现在已成功将 Nginx 文档根目录移动到新位置。
结论
在本教程中,我们介绍了如何将Nginx文档根目录更改为新位置。这可以帮助您进行基本的Web服务器管理,例如有效地在单个服务器上管理多个站点。它还允许您利用替代存储设备,如网络块存储,在网站的需求变化时有所帮助,从而扩展网站。
如果您正在管理一个繁忙或不断增长的网站,您可能会对学习如何使用HTTP/2设置Nginx以利用其高传输速度来传输内容感兴趣。