如何在 Ubuntu 20.04 上安装 Nginx?
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 进程
现在我们已经启动并运行了 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 服务,下面应该花几分钟时间熟悉一些重要的目录和文件。
内容
- /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 错误都会记录在这个日志中。
相关文章
Nginx 和 uWISG 服务器之间如何配合工作的
发布时间:2023/03/29 浏览次数:161 分类:网络
-
Nginx和uWISG是两个常用的服务器软件,它们可以协同工作以提供更加稳定和高效的网络服务。本文将详细介绍Nginx和uWISG之间的配合工作原理,以及如何配置它们以实现最佳性能。 一、
设置 PHP-FPM 和 Nginx Docker 容器
发布时间:2023/03/29 浏览次数:148 分类:PHP
-
在本篇文章中,我们将讨论在 Docker 上进行本地开发时如何设置 PHP、PHP-FPM 和 NGINX 容器。
在 Ubuntu 18.04 上使用 Nginx 安装 WordPress
发布时间:2022/10/15 浏览次数:230 分类:操作系统
-
WordPress 是最受欢迎的开源内容管理系统 (CMS) 之一,与 Drupal 或 Joomla 等其他 CMS 相比,其市场份额高达 60%。 WordPress 可用于开发任何类型的网站,无论是博客、小型企业还是大型企业。
Nginx 运行但是不提供站点服务
发布时间:2022/05/15 浏览次数:187 分类:网络
-
我们最近在一台新机器上安装了 nginx 版本 1.17。 在 sites-available`中创建的配置被符号链接到 `sites-enabled` ,但 nginx 没有为任何域名提供服务。
Nginx 如何修复 Reponse Status 0 Worker Process Exited on Signal 11
发布时间:2022/05/14 浏览次数:175 分类:网络
-
实际上,让我们首先澄清一下:HTTP 没有状态码 0(零)。 问题是 nginx 工作进程在处理请求时死亡,因此连接中断,导致没有任何响应数据的错误。
Nginx 如何修复 Unknown "connection_upgrade" Variable 错误
发布时间:2022/03/28 浏览次数:5026 分类:网络
-
在使用 Websockets 或使用 nginx 配置服务器时,我们可能会在 nginx 配置中遇到 `$connection_upgrade` 变量。 $connection_upgrade 变量默认不可用。 但是,建议在反向代理设置中定义和使用它。
Nginx - 如何修复 “ssl” Directive Is Deprecated, Use “listen … ssl” 错
发布时间:2022/03/23 浏览次数:131 分类:网络
-
本篇文章介绍如何修复 nginx 的 “ ‘ssl’ Directive Is Deprecated, Use ‘listen … ssl’ ” 错误。Nginx 使用类似 YAML 的定义格式来创建配置。 这种格式随着时间的推移通过添加、删除或更改关键
在 Ubuntu 20.04 如何使用 Let's Encrypt 结合 Nginx 配置 https
发布时间:2022/02/03 浏览次数:335 分类:操作系统
-
在本篇文章中,我们介绍了安装了 Let's Encrypt 客户端 certbot,为我们的域名下载 SSL 证书,配置 Nginx 来使用这些证书,并设置自动证书更新。
深入理解 Nginx Location 块匹配算法
发布时间:2022/01/15 浏览次数:76 分类:网络
-
与 Nginx 用于选择将处理请求的 Server 块的过程类似,Nginx 也有一个既定的算法来决定 Server 块中的哪个 Location 块用于处理请求。