迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 操作系统 >

如何在 Ubuntu 20.04 上安装 Nginx?

作者:迹忆客 最近更新:2022/01/11 浏览次数:

Nginx 是世界上最受欢迎的 Web 服务器之一,负责托管互联网上一些最大和流量最高的站点。 这是一个轻量级的应用软件,可以用作 Web 服务器或反向代理。

在本篇文章中,我们将讨论如何在 Ubuntu 20.04 系统上安装 Nginx、调整防火墙、管理 Nginx 进程以及设置服务器块从而可以从单个服务器上托管多个域名。

在正式开始本篇内容之前,您应该拥有一个在您的系统器上配置了 sudo 权限的普通非 root 用户。

在完成本篇内容的最后一步之前,您还可以选择注册一个域名。

当您有可用的帐户时,请以非 root 用户身份登录来开始。

安装Nginx

因为 Nginx 在 Ubuntu 的默认仓库中可用,所以可以使用 apt 打包系统从这些仓库中进行安装。

由于这是我们在本次会话中与 apt 打包系统的第一次交互,我们将更新我们的本地包索引,以便我们可以访问最新的包列表。 之后,我们可以安装nginx:

$ sudo apt update
$ sudo apt install nginx

接受该过程后,apt 会将 Nginx 和任何必需的依赖项安装到您的操作系统中。

调整防火墙

在测试 Nginx 之前,需要调整防火墙软件,来允许访问该服务。 Nginx 在安装时将自己注册为 ufw 的服务,从而可以直接允许 Nginx 访问。

通过键入以下内容列出 ufw 知道如何使用的应用程序配置:

$ sudo ufw app list

我们应该可以看到应用程序配置文件的列表:

Output
Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

如输出所示,Nginx 有三个可用的配置文件:

  • Nginx Full:此配置文件同时打开端口 80(正常、未加密的网络流量)和端口 443(TLS/SSL 加密流量)
  • Nginx HTTP:此配置文件仅打开端口 80(正常、未加密的网络流量)
  • Nginx HTTPS:此配置文件仅打开端口 443(TLS/SSL 加密流量)

建议启用最严格的配置文件,该配置文件仍将允许我们配置的流量。 现在,我们只需要允许端口 80 上的流量。

可以通过以下命令启用此功能:

$ sudo ufw allow 'Nginx HTTP'

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

$ 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)

检查 Web 服务器

在安装过程结束时,Ubuntu 20.04 启动 Nginx。 Web 服务器应该已经启动并正在运行。

我们可以通过 systemd init 系统检查以确保服务正在运行,输入:

$ systemctl status nginx

输出内容如下

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 实际请求一个页面。

我们可以通过导航到服务器的 IP 地址来访问默认的 Nginx 登录页面,以确认软件运行正常。 如果不知道服务器的 IP 地址,可以使用 icanhazip.com 工具找到它,该工具将为我们提供从互联网上其他位置收到的公共 IP 地址:

$ curl -4 icanhazip.com

获得服务器的 IP 地址后,将其输入到浏览器的地址栏中:

http://你的服务器ip

我们应该会看到默认的 Nginx 页面:

 

Nginx 默认的显示页面
Nginx 默认的显示页面

 

如果看到此页面,则服务器正在正确运行。

管理 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

我们现在已经学习了基本的管理命令,应该准备好配置站点从而可以解析多个域名。

设置服务器块(推荐)

使用 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:

$ nano /var/www/your_domain/html/index.html

添加如下内容

index.html

<html>
    <head>
        <title>Welcome to jiyik.com!</title>
    </head>
    <body>
        <h1>Success!  The jiyik.com server block is working!</h1>
    </body>
</html>

保存并关闭文件,方法是按Ctrl+X退出,然后在提示保存时,输入 Y 然后按回车。

为了让 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 更新为我们的域名。

接下来,让我们通过创建指向启用站点的目录的链接来启用该文件,Nginx 在启动期间读取该目录:

$ sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

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

现在启用并配置了两个服务器块,来根据其 listen 和 server_name 指令响应请求

  • 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 进行测试,应该在其中看到如下内容:

nginx 为域名提供服务

熟悉重要的 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 不会使用在此目录中找到的配置文件,除非它们链接到启用了站点的目录。 通常,所有服务器块配置都在此目录中完成,然后通过链接到另一个目录启用。
  • /etc/nginx/sites-enabled/ :存储启用的每个站点服务器块的目录。 通常,这些是通过链接到在 sites-available 目录中找到的配置文件来创建的。
  • /etc/nginx/snippets :该目录包含那些包含在 Nginx 配置中的其他地方的配置片段。

服务器日志

  • /var/log/nginx/access.log :对 Web 服务器的每个请求都记录在此日志文件中,除非在 Nginx 中进行配置禁修改为其他文件或者不记录访问日志。
  • /var/log/nginx/error.log :任何 Nginx 错误都会记录在这个日志中。

上一篇:Docker 部署 nginx php 应用

下一篇:没有了

除非注明转载,本站文章均为原创或翻译,欢迎转载,转载请以链接形式注明出处

本文地址:

迹忆客

专注技术分享,项目实战分享!

技术宅 乐于分享 7年编程经验
社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

热门文章

教程更新

热门标签