介绍
Nginx是世界上最流行的 Web 服务器之一,负责托管互联网上一些最大和流量最高的网站。它是一种轻量级选择,可以用作 Web 服务器或反向代理。
在本指南中,我们将讨论如何在您的 Ubuntu 20.04 服务器上安装 Nginx,调整防火墙,管理 Nginx 进程,并设置服务器块以从单个服务器托管多个域。
使用 DigitalOcean 应用平台 简化部署应用程序。几分钟内直接从 GitHub 部署。
先决条件
在开始本指南之前,您应该在服务器上配置一个常规的、非 root 用户,并赋予 sudo 权限。您可以通过按照我们的 Ubuntu 20.04 初始服务器设置指南 进行学习来配置常规用户帐户。
您可能还想在完成本教程的最后步骤之前选择注册一个域名。有关在DigitalOcean上设置域名的更多信息,请参考我们的介绍DigitalOcean DNS。
当您拥有可用账户时,请使用您的非根用户登录开始。
步骤1 – 安装Nginx
由于Nginx可在Ubuntu的默认仓库中找到,因此可以使用apt
打包系统从这些仓库安装它。
由于这是我们在本次会话中首次与apt
打包系统互动,因此我们将更新本地包索引,以便可以访问最新的包列表。之后,我们可以安装nginx
:
在接受了该过程后,apt
将会在您的服务器上安装Nginx和任何所需的依赖项。
步骤2 – 调整防火墙
在测试 Nginx 之前,需要调整防火墙软件以允许访问该服务。安装时,Nginx 会向 ufw
注册自己作为一个服务,因此允许 Nginx 访问变得非常简单。
通过输入以下命令来列出 ufw
知道如何处理的应用程序配置:
您应该会得到应用程序配置文件的列表:
OutputAvailable applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
如输出所示,Nginx 有三个可用的配置文件:
- Nginx Full: 此配置文件打开了 80 端口(常规、未加密的 Web 流量)和 443 端口(TLS/SSL 加密的流量)
- Nginx HTTP: 此配置文件仅打开了 80 端口(常规、未加密的 Web 流量)
- Nginx HTTPS: 此配置文件仅打开了 443 端口(TLS/SSL 加密的流量)
建议启用最严格的配置文件,但仍然允许您配置的流量。目前,我们只需要允许 80 端口上的流量。
您可以通过输入以下命令来启用此功能:
您可以通过输入以下命令来验证更改:
输出将指示允许哪些 HTTP 流量:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
步骤 3 – 检查您的 Web 服务器
在安装过程结束时,Ubuntu 20.04 会启动 Nginx。Web 服务器应该已经启动并运行。
我们可以使用systemd
初始化系统来确保服务正在运行,方法如下:
Output● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-04-20 16:08:19 UTC; 3 days ago
Docs: man:nginx(8)
Main PID: 2369 (nginx)
Tasks: 2 (limit: 1153)
Memory: 3.5M
CGroup: /system.slice/nginx.service
├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─2380 nginx: worker process
确认服务已成功启动。但是,测试的最佳方法是实际请求Nginx的页面。
您可以访问默认的Nginx欢迎页面,以确认软件是否正常运行,方法是导航到您服务器的IP地址。如果您不知道服务器的IP地址,可以使用icanhazip.com工具找到它,该工具将为您提供从互联网上其他位置接收到的公共IP地址:
当您获得服务器的IP地址时,请在浏览器的地址栏中输入:
http://your_server_ip
您应该收到默认的Nginx欢迎页面:
如果您看到此页面,则表示您的服务器正在正确运行并且可以进行管理。
步骤4 – 管理Nginx进程
现在您已经启动了Web服务器,让我们来回顾一些基本的管理命令。
要停止您的Web服务器,请键入:
要在服务器停止时启动Web服务器,请键入:
要先停止然后再次启动服务,请键入:
如果您只是进行配置更改,Nginx通常可以重新加载而不会断开连接。要执行此操作,请键入:
默认情况下,Nginx 配置为在服务器启动时自动启动。如果这不是你想要的,你可以通过键入以下命令来禁用此行为:
要重新启用服务在启动时启动,你可以输入以下命令:
现在你已经学会了基本的管理命令,应该准备好配置站点以托管多个域。
第 5 步 – 设置服务器块(推荐)
在使用 Nginx Web 服务器时,服务器块(类似于 Apache 中的虚拟主机)可用于封装配置详细信息并从单个服务器上托管多个域。我们将设置一个名为your_domain的域,但你应该将其替换为你自己的域名。
在 Ubuntu 20.04 上的 Nginx 默认启用了一个服务器块,配置为从/var/www/html
目录中提供文档。虽然这对于单个站点效果很好,但如果你要托管多个站点,它可能会变得难以管理。我们不会修改/var/www/html
,而是在/var/www
中创建一个目录结构,用于我们的your_domain站点,保留/var/www/html
作为默认目录,如果客户端请求与其他任何站点不匹配,则会提供服务。
如下创建your_domain目录,使用-p
标志来创建任何必要的父目录:
接下来,使用$USER
环境变量分配目录的所有权:
如果您没有修改umask
值,设置了默认文件权限,那么您的网站根目录的权限应该是正确的。为确保权限正确,并允许所有者读取、写入和执行文件,同时只授予组和其他用户读取和执行权限,您可以输入以下命令:
接下来,使用nano
或您喜爱的编辑器创建一个示例index.html
页面:
在里面,添加以下示例HTML:
按Ctrl+X
退出并保存文件,然后按Y
,再按Enter
。
为了让 Nginx 提供此内容,需要创建一个带有正确指令的服务器块。而不是直接修改默认配置文件,让我们在/etc/nginx/sites-available/your_domain
中创建一个新的配置文件:
粘贴以下配置块,它类似于默认配置,但针对我们的新目录和域名进行了更新:
请注意,我们已将root
配置更新为我们的新目录,并将server_name
更新为我们的域名。
接下来,让我们通过创建一个从该文件到sites-enabled
目录的链接来启用该文件,Nginx 在启动期间从该目录读取文件:
注意: Nginx 使用一种常见的做法,称为符号链接或symlinks,来跟踪哪些服务器块已启用。创建符号链接就像在磁盘上创建快捷方式一样,这样您以后可以从sites-enabled
目录中删除快捷方式,同时保留sites-available
中的服务器块,以便启用它。
现在已启用并配置了两个服务器块,以根据它们的listen
和server_name
指令响应请求(您可以在此处阅读有关Nginx如何处理这些指令的更多信息):
your_domain
:将响应对your_domain
和www.your_domain
的请求。default
:将响应80端口上不匹配其他两个块的任何请求。
为了避免由于添加额外的服务器名称而可能导致的哈希桶内存问题,有必要调整/etc/nginx/nginx.conf
文件中的单个值。打开文件:
找到server_names_hash_bucket_size
指令,并删除#
符号以取消注释该行。如果您使用nano,您可以通过按下CTRL
和w
来快速搜索文件中的单词。
注意: 将代码行注释掉(通常是在行首加上#
)是另一种禁用它们而无需实际删除它们的方法。许多配置文件都包含多个已注释掉的选项,以便可以通过在活动代码和文档之间切换来启用或禁用它们。
...
http {
...
server_names_hash_bucket_size 64;
...
}
...
完成后保存并关闭文件。
接下来,测试以确保您的所有Nginx文件中都没有语法错误:
如果没有任何问题,请重新启动Nginx以启用更改:
现在Nginx应该正在提供您的域名。您可以通过导航到http://your_domain
来测试,您应该会看到类似以下内容:
步骤6 – 熟悉重要的Nginx文件和目录
现在您已经知道如何管理Nginx服务本身,您应该花几分钟时间熟悉一些重要的目录和文件。
内容
/var/www/html
:实际的网页内容,默认情况下仅包含你之前看到的默认 Nginx 页面,位于/var/www/html
目录中。这可以通过修改 Nginx 配置文件来更改。
服务器配置
/etc/nginx
:Nginx 配置目录。所有 Nginx 配置文件都位于此处。/etc/nginx/nginx.conf
:主 Nginx 配置文件。可以修改此文件以更改 Nginx 全局配置。/etc/nginx/sites-available/
:可以存储每个站点服务器块的目录。除非将其链接到sites-enabled
目录,否则 Nginx 不会使用此目录中找到的配置文件。通常,在此目录中进行所有服务器块配置,然后通过链接到其他目录来启用。/etc/nginx/sites-enabled/
:存储已启用的每个站点服务器块的目录。通常,这些是通过链接到sites-available
目录中找到的配置文件来创建的。/etc/nginx/snippets
:此目录包含可以在 Nginx 配置中的其他位置包含的配置片段。可重复使用的配置段是重构为片段的良好候选者。
服务器日志
/var/log/nginx/access.log
:除非 Nginx 配置为否,则记录在此日志文件中的每个对您的 Web 服务器的请求。/var/log/nginx/error.log
:任何 Nginx 错误都将记录在此日志中。
结论
现在您已经安装了您的 Web 服务器,您有许多选项可用于提供内容类型和要使用的技术,以创建更丰富的体验。
如果您想构建更完整的应用程序堆栈,请查看文章如何在 Ubuntu 20.04 上安装 Linux、Nginx、MySQL、PHP(LEMP 堆栈)。
为了使用 Let’s Encrypt 免费 SSL 证书为您的域名设置 HTTPS,请继续阅读 如何在 Ubuntu 20.04 上使用 Let’s Encrypt 保护 Nginx。
Source:
https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-20-04