如何在Ubuntu20.04上安装Nginx
介绍
Nginx 是世界上最受欢迎的网络服务器之一,负责托管互联网上一些最大和流量最高的网站。 这是一个轻量级的选择,可以用作 Web 服务器或反向代理。
在本指南中,我们将讨论如何在您的 Ubuntu 20.04 服务器上安装 Nginx、调整防火墙、管理 Nginx 进程以及设置服务器块以从一台服务器托管多个域。
先决条件
在开始本指南之前,您应该在您的服务器上配置一个具有 sudo 权限的常规非 root 用户。 您可以按照我们的 Ubuntu 20.04 初始服务器设置指南来了解如何配置普通用户帐户。
您还可以选择在完成本教程的最后一步之前注册一个域名。 要了解有关使用 DigitalOcean 设置域名的更多信息,请参阅我们的 DigitalOcean DNS 简介。
当您有可用帐户时,请以非 root 用户身份登录开始。
第 1 步 – 安装 Nginx
由于 Nginx 在 Ubuntu 的默认存储库中可用,因此可以使用 apt
打包系统从这些存储库安装它。
由于这是我们在本次会议中与 apt
包装系统的第一次互动,我们将更新我们的本地包装索引,以便我们可以访问最新的包装清单。 之后,我们可以安装nginx
:
sudo apt update sudo apt install nginx
接受该过程后,apt
将安装 Nginx 和任何所需的依赖项到您的服务器。
第 2 步 – 调整防火墙
在测试 Nginx 之前,需要调整防火墙软件以允许访问该服务。 Nginx 在安装时将自己注册为 ufw
的服务,从而可以直接允许 Nginx 访问。
通过键入以下内容列出 ufw
知道如何使用的应用程序配置:
sudo ufw app list
您应该获得应用程序配置文件的列表:
OutputAvailable applications: Nginx Full Nginx HTTP Nginx HTTPS OpenSSH
如输出所示,Nginx 有三个可用的配置文件:
- Nginx Full:此配置文件同时打开端口 80(正常、未加密的 Web 流量)和端口 443(TLS/SSL 加密流量)
- Nginx HTTP:此配置文件仅打开端口 80(正常、未加密的网络流量)
- Nginx HTTPS:此配置文件仅打开端口 443(TLS/SSL 加密流量)
建议您启用最严格的配置文件,该配置文件仍将允许您配置的流量。 现在,我们只需要允许端口 80 上的流量。
您可以通过键入以下内容启用此功能:
sudo ufw allow 'Nginx HTTP'
您可以通过键入以下内容来验证更改:
sudo ufw status
输出将指示允许哪些 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
初始化系统检查以确保服务正在运行:
systemctl status nginx
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 工具找到它,它会为您提供从 Internet 上其他位置收到的公共 IP 地址:
curl -4 icanhazip.com
获得服务器的 IP 地址后,将其输入浏览器的地址栏中:
http://your_server_ip
您应该会收到默认的 Nginx 登录页面:
如果您在此页面上,则表明您的服务器运行正常并且可以进行管理。
第 4 步 - 管理 Nginx 进程
现在您已经启动并运行了 Web 服务器,让我们回顾一些基本的管理命令。
要停止您的 Web 服务器,请键入:
sudo systemctl stop nginx
要在 Web 服务器停止时启动它,请键入:
sudo systemctl start nginx
要停止然后再次启动服务,请键入:
sudo systemctl restart nginx
如果您只是进行配置更改,Nginx 通常可以重新加载而不会断开连接。 为此,请键入:
sudo systemctl reload nginx
默认情况下,Nginx 配置为在服务器启动时自动启动。 如果这不是您想要的,您可以通过键入以下内容来禁用此行为:
sudo systemctl disable nginx
要重新启用服务以在启动时启动,您可以键入:
sudo systemctl enable 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
标志创建任何必要的父目录:
sudo mkdir -p /var/www/your_domain/html
接下来,使用 $USER
环境变量分配目录的所有权:
sudo chown -R $USER:$USER /var/www/your_domain/html
如果您没有修改设置默认文件权限的 umask
值,则您的 Web 根目录的权限应该是正确的。 为确保您的权限正确,并允许所有者读取、写入和执行文件,而只授予组和其他人读取和执行权限,您可以输入以下命令:
sudo chmod -R 755 /var/www/your_domain
接下来,使用 nano
或您喜欢的编辑器创建示例 index.html
页面:
sudo nano /var/www/your_domain/html/index.html
在里面,添加以下示例 HTML:
/var/www/your_domain/html/index.html
<html> <head> <title>Welcome to your_domain!</title> </head> <body> <h1>Success! The your_domain server block is working!</h1> </body> </html>
按 Ctrl+X
退出保存并关闭文件,然后在提示保存时按 Y
然后按 Enter
。
为了让 Nginx 提供此内容,有必要使用正确的指令创建一个服务器块。 与其直接修改默认配置文件,不如在/etc/nginx/sites-available/your_domain
处新建一个:
sudo nano /etc/nginx/sites-available/your_domain
粘贴以下配置块,与默认配置类似,但针对我们的新目录和域名进行了更新:
/etc/nginx/sites-available/your_domain
server { listen 80; listen [::]:80; root /var/www/your_domain/html; index index.html index.htm index.nginx-debian.html; server_name your_domain www.your_domain; location / { try_files $uri $uri/ =404; } }
请注意,我们已将 root
配置更新为我们的新目录,并将 server_name
配置更新为我们的域名。
接下来,让我们通过创建一个指向 sites-enabled
目录的链接来启用该文件,Nginx 在启动期间会读取该目录:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
注意: Nginx 使用一种称为符号链接或符号链接的常见做法来跟踪启用了哪些服务器块。 创建符号链接就像在磁盘上创建一个快捷方式,因此您可以稍后从 sites-enabled
目录中删除该快捷方式,同时如果您想启用它,请将服务器块保留在 sites-available
中。
现在启用并配置了两个服务器块,以根据它们的 listen
和 server_name
指令响应请求(您可以在 此处 阅读有关 Nginx 如何处理这些指令的更多信息):
your_domain
:将响应对your_domain
和www.your_domain
的请求。default
:将响应端口 80 上与其他两个块不匹配的任何请求。
为避免添加其他服务器名称可能引起的哈希桶内存问题,有必要调整 /etc/nginx/nginx.conf
文件中的单个值。 打开文件:
sudo nano /etc/nginx/nginx.conf
找到 server_names_hash_bucket_size
指令并删除 #
符号以取消注释该行。 如果您使用的是 nano,您可以通过按 CTRL
和 w
快速搜索文件中的单词。
注意: 注释掉代码行——通常通过将 #
放在行首——是另一种禁用它们而无需实际删除它们的方法。 许多配置文件附带了多个注释掉的选项,以便可以通过在活动代码和文档之间切换来启用或禁用它们。
/etc/nginx/nginx.conf
... http { ... server_names_hash_bucket_size 64; ... } ...
完成后保存并关闭文件。
接下来,测试以确保您的任何 Nginx 文件中都没有语法错误:
sudo nginx -t
如果没有任何问题,请重新启动 Nginx 以启用您的更改:
sudo systemctl restart nginx
Nginx 现在应该为您的域名提供服务。 您可以通过导航到 http://your_domain
进行测试,您应该会看到如下内容:
第 6 步 - 熟悉重要的 Nginx 文件和目录
现在您已经知道如何管理 Nginx 服务本身,您应该花几分钟时间熟悉一些重要的目录和文件。
内容
/var/www/html
:实际的 Web 内容,默认情况下仅包含您之前看到的默认 Nginx 页面,从/var/www/html
目录提供。 这可以通过更改 Nginx 配置文件来更改。
服务器配置
/etc/nginx
:Nginx 配置目录。 所有 Nginx 配置文件都驻留在此处。/etc/nginx/nginx.conf
:主要的 Nginx 配置文件。 可以对其进行修改以更改 Nginx 全局配置。/etc/nginx/sites-available/
:每个站点服务器块可以存储的目录。 Nginx 不会使用在该目录中找到的配置文件,除非它们链接到sites-enabled
目录。 通常,所有服务器块配置都在此目录中完成,然后通过链接到另一个目录来启用。/etc/nginx/sites-enabled/
:存储启用的每站点服务器块的目录。 通常,这些是通过链接到sites-available
目录中的配置文件来创建的。/etc/nginx/snippets
:此目录包含可以包含在 Nginx 配置中的其他位置的配置片段。 潜在可重复的配置段是重构为片段的良好候选者。
服务器日志
/var/log/nginx/access.log
:对您的 Web 服务器的每个请求都记录在此日志文件中,除非 Nginx 配置为不这样做。/var/log/nginx/error.log
:任何 Nginx 错误都将记录在此日志中。
结论
现在您已经安装了 Web 服务器,对于要提供的内容类型和用于创建更丰富体验的技术,您有很多选择。
如果您想构建更完整的应用程序堆栈,请查看文章 如何在 Ubuntu 20.04 上安装 Linux、Nginx、MySQL、PHP(LEMP 堆栈)。
为了使用 Let's Encrypt 为您的域名设置 HTTPS 并使用免费的 SSL 证书,您应该继续阅读 如何在 Ubuntu 20.04 上使用 Let's Encrypt 保护 Nginx。