如何在Ubuntu 20.04上安装Nginx

介绍

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:

  1. sudo apt update
  2. sudo apt install nginx

在接受了该过程后,apt将会在您的服务器上安装Nginx和任何所需的依赖项。

步骤2 – 调整防火墙

在测试 Nginx 之前,需要调整防火墙软件以允许访问该服务。安装时,Nginx 会向 ufw 注册自己作为一个服务,因此允许 Nginx 访问变得非常简单。

通过输入以下命令来列出 ufw 知道如何处理的应用程序配置:

  1. sudo ufw app list

您应该会得到应用程序配置文件的列表:

Output
Available 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 端口上的流量。

您可以通过输入以下命令来启用此功能:

  1. sudo ufw allow 'Nginx HTTP'

您可以通过输入以下命令来验证更改:

  1. sudo ufw status

输出将指示允许哪些 HTTP 流量:

Output
Status: 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初始化系统来确保服务正在运行,方法如下:

  1. 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工具找到它,该工具将为您提供从互联网上其他位置接收到的公共IP地址:

  1. curl -4 icanhazip.com

当您获得服务器的IP地址时,请在浏览器的地址栏中输入:

http://your_server_ip

您应该收到默认的Nginx欢迎页面:

如果您看到此页面,则表示您的服务器正在正确运行并且可以进行管理。

步骤4 – 管理Nginx进程

现在您已经启动了Web服务器,让我们来回顾一些基本的管理命令。

要停止您的Web服务器,请键入:

  1. sudo systemctl stop nginx

要在服务器停止时启动Web服务器,请键入:

  1. sudo systemctl start nginx

要先停止然后再次启动服务,请键入:

  1. sudo systemctl restart nginx

如果您只是进行配置更改,Nginx通常可以重新加载而不会断开连接。要执行此操作,请键入:

  1. sudo systemctl reload nginx

默认情况下,Nginx 配置为在服务器启动时自动启动。如果这不是你想要的,你可以通过键入以下命令来禁用此行为:

  1. sudo systemctl disable nginx

要重新启用服务在启动时启动,你可以输入以下命令:

  1. sudo systemctl enable nginx

现在你已经学会了基本的管理命令,应该准备好配置站点以托管多个域。

在使用 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标志来创建任何必要的父目录:

  1. sudo mkdir -p /var/www/your_domain/html

接下来,使用$USER环境变量分配目录的所有权:

  1. sudo chown -R $USER:$USER /var/www/your_domain/html

如果您没有修改umask值,设置了默认文件权限,那么您的网站根目录的权限应该是正确的。为确保权限正确,并允许所有者读取、写入和执行文件,同时只授予组和其他用户读取和执行权限,您可以输入以下命令:

  1. sudo chmod -R 755 /var/www/your_domain

接下来,使用nano或您喜爱的编辑器创建一个示例index.html页面:

  1. 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中创建一个新的配置文件:

  1. 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 在启动期间从该目录读取文件:

  1. sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

注意: Nginx 使用一种常见的做法,称为符号链接或symlinks,来跟踪哪些服务器块已启用。创建符号链接就像在磁盘上创建快捷方式一样,这样您以后可以从sites-enabled目录中删除快捷方式,同时保留sites-available中的服务器块,以便启用它。

现在已启用并配置了两个服务器块,以根据它们的listenserver_name指令响应请求(您可以在此处阅读有关Nginx如何处理这些指令的更多信息):

  • your_domain:将响应对your_domainwww.your_domain的请求。
  • default:将响应80端口上不匹配其他两个块的任何请求。

为了避免由于添加额外的服务器名称而可能导致的哈希桶内存问题,有必要调整/etc/nginx/nginx.conf文件中的单个值。打开文件:

  1. sudo nano /etc/nginx/nginx.conf

找到server_names_hash_bucket_size指令,并删除#符号以取消注释该行。如果您使用nano,您可以通过按下CTRLw来快速搜索文件中的单词。

注意: 将代码行注释掉(通常是在行首加上#)是另一种禁用它们而无需实际删除它们的方法。许多配置文件都包含多个已注释掉的选项,以便可以通过在活动代码和文档之间切换来启用或禁用它们。

/etc/nginx/nginx.conf
...
http {
    ...
    server_names_hash_bucket_size 64;
    ...
}
...

完成后保存并关闭文件。

接下来,测试以确保您的所有Nginx文件中都没有语法错误:

  1. sudo nginx -t

如果没有任何问题,请重新启动Nginx以启用更改:

  1. sudo systemctl restart 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