介绍
Nginx是世界上最受欢迎的Web服务器之一,负责托管互联网上一些规模最大和流量最高的网站,这是一个轻量级的选择,可以作为Web服务器或反向代理。
在本指南中,我们将讨论如何在 Ubuntu 20.04 服务器上安装 Nginx,调整防火墙,管理 Nginx 流程,并设置服务器块来从单个服务器中托管多个域。
<$>[info] 简化使用 DigitalOcean App Platform的应用程序部署。
前提条件
在您开始本指南之前,您应该有一个正常的非根用户,在您的服务器上配置了 sudo 权限. 您可以通过遵循我们的 Ubuntu 20.04 初始服务器设置指南来学习如何配置常规用户帐户。
您还可以选择在完成本教程的最后步骤之前注册域名。 有关使用 DigitalOcean 设置域名的更多信息,请参阅我们的 Introduction to DigitalOcean DNS。
当你有一个帐户可用时,登录作为你的非根用户开始。
步骤1:安装 Nginx
由于Nginx在Ubuntu的默认存储库中可用,因此可以使用apt
包装系统从这些存储库中安装。
由于这是我们此次第一次与apt
包装系统进行交互,我们将更新本地的包装索引,以便我们可以访问最新的包装列表。
1sudo apt update
2sudo apt install nginx
接受此程序后,apt 将为您的服务器安装 Nginx 和任何所需的依赖。
第2步:调整防火墙
在测试 Nginx 之前,需要调整防火墙软件以允许访问该服务。
列出「ufw」知道如何通过键入工作的应用程序配置:
1sudo ufw app list
您应该获得应用程序配置文件的列表:
1[secondary_label Output]
2Available applications:
3 Nginx Full
4 Nginx HTTP
5 Nginx HTTPS
6 OpenSSH
正如输出所示,对 Nginx 有三个配置文件:
- Nginx Full :此配置文件打开端口 80(正常,未加密的网络流量)和端口 443(TLS/SSL加密的流量)
- Nginx HTTP :此配置文件只打开端口 80(正常,未加密的网络流量)
- Nginx HTTPS :此配置文件只打开端口 443 (TLS/SSL加密的流量)
建议您启用最具限制性的配置文件,它仍然允许您配置的流量。
你可以通过键入来实现这一点:
1sudo ufw allow 'Nginx HTTP'
您可以通过键入检查更改:
1sudo ufw status
输出将显示哪些 HTTP 流量允许:
1[secondary_label Output]
2Status: active
3
4To Action From
5-- ------ ----
6OpenSSH ALLOW Anywhere
7Nginx HTTP ALLOW Anywhere
8OpenSSH (v6) ALLOW Anywhere (v6)
9Nginx HTTP (v6) ALLOW Anywhere (v6)
步骤三:检查您的Web服务器
在安装过程结束时,Ubuntu 20.04 启动了 Nginx. Web 服务器应该已经启动并运行。
我们可以通过systemd
init 系统检查,以确保该服务通过键入运行:
1systemctl status nginx
1[secondary_label Output]
2● nginx.service - A high performance web server and a reverse proxy server
3 Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
4 Active: active (running) since Fri 2020-04-20 16:08:19 UTC; 3 days ago
5 Docs: man:nginx(8)
6 Main PID: 2369 (nginx)
7 Tasks: 2 (limit: 1153)
8 Memory: 3.5M
9 CGroup: /system.slice/nginx.service
10 ├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
11 └─2380 nginx: worker process
正如本文所证实的那样,该服务已经成功启动,但是,测试这一点的最佳方法是实际上请求 Nginx 的页面。
如果你不知道你的服务器的IP地址,你可以通过使用icanhazip.com工具来找到它,这将给你你的公共IP地址,如从互联网上的另一个位置收到的:
1curl -4 icanhazip.com
当您有您的服务器的IP地址时,请将其输入到您的浏览器的地址栏:
1http://your_server_ip
您应该收到默认的 Nginx 登陆页面:
如果您在这个页面上,您的服务器正在正确运行,并准备好进行管理。
第4步:管理 Nginx 流程
现在你有你的Web服务器运行,让我们审查一些基本的管理命令。
要停止您的 Web 服务器,键入:
1sudo systemctl stop nginx
要在停止时启动 Web 服务器,键入:
1sudo systemctl start nginx
要停止,然后重新启动服务,键入:
1sudo systemctl restart nginx
如果您只是在进行配置更改, Nginx 通常可以重新加载而不会放弃连接。
1sudo systemctl reload nginx
默认情况下, Nginx 配置为在服务器启动时自动启动. 如果这不是你想要的,你可以通过键入来禁用此行为:
1sudo systemctl disable nginx
要重新启用服务在启动时启动,您可以键入:
1sudo systemctl enable nginx
您现在已经学习了基本的管理命令,并且应该准备好配置网站以托管多个域。
步骤 5 – 设置服务器封锁(推荐)
在使用 Nginx 网页服务器时,可使用 _server blocks(类似于 Apache 中的虚拟主机)来封装配置细节,并从单个服务器中托管多个域。
Nginx 在 Ubuntu 20.04 上有一个默认启用的服务器块,可配置为在 `/var/www/html 中的目录中服务的文档。虽然这对单个网站来说很好,但如果您托管多个网站,它可能会变得不便。
创建 your_domain 的目录如下,使用-p
旗帜创建任何必要的母目录:
1sudo mkdir -p /var/www/your_domain/html
接下来,与$USER
环境变量分配目录的所有权:
1sudo chown -R $USER:$USER /var/www/your_domain/html
如果您尚未修改umask
值,则 Web 根的权限应该是正确的,从而设置了默认文件权限。 若要确保您的权限是正确的,并允许所有者阅读、写入和执行文件,同时只向组和其他人授予阅读和执行权限,则可以输入以下命令:
1sudo chmod -R 755 /var/www/your_domain
接下来,使用nano
或您最喜欢的编辑器创建一个样本index.html
页面:
1sudo nano /var/www/your_domain/html/index.html
内部,添加以下样本HTML:
1[label /var/www/your_domain/html/index.html]
2<html>
3 <head>
4 <title>Welcome to your_domain!</title>
5 </head>
6 <body>
7 <h1>Success! The your_domain server block is working!</h1>
8 </body>
9</html>
保存和关闭文件,按Ctrl + X
退出,然后当被要求保存时,Y
然后Enter
。
为了使 Nginx 能够提供此内容,我们需要创建一个正确的服务器块,而不是直接修改默认配置文件,让我们在 /etc/nginx/sites-available/your_domain
创建一个新的文件:
1sudo nano /etc/nginx/sites-available/your_domain
插入以下配置块,类似于默认,但更新为我们的新目录和域名:
1[label /etc/nginx/sites-available/your_domain]
2server {
3 listen 80;
4 listen [::]:80;
5
6 root /var/www/your_domain/html;
7 index index.html index.htm index.nginx-debian.html;
8
9 server_name your_domain www.your_domain;
10
11 location / {
12 try_files $uri $uri/ =404;
13 }
14}
请注意,我们已将根
配置更新到我们的新目录中,并将server_name
更新到我们的域名中。
接下来,让我们通过从它创建一个链接到网站启用
目录来激活该文件, Nginx 在启动时会从中读取:
1sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
<$>[注] 注: Nginx使用一种常见的做法,称为符号链接,或simlinks,来跟踪您的服务器块中哪些是启用的。
现在两个服务器块已启用并配置为基于其倾听
和服务器名称
指令响应请求(您可以阅读有关 Nginx 如何处理这些指令的更多信息):
your_domain
: 将响应对your_domain
和www.your_domain
的请求。默认
: 将响应任何不匹配其他两个区块的端口 80 的请求。
为了避免可能导致添加额外的服务器名称的哈希库存问题,需要在 `/etc/nginx/nginx.conf 文件中调整单个值。
1sudo nano /etc/nginx/nginx.conf
查找server_names_hash_bucket_size
指令,然后删除#
符号以解除评论,如果您正在使用nano,您可以通过按CTRL
和w
快速搜索文件中的单词。
<$>[注]
注: 评论代码行 - 通常通过在行开始时设置#
- 是禁用它们的另一种方式,而无需实际删除它们。
1[label /etc/nginx/nginx.conf]
2...
3http {
4 ...
5 server_names_hash_bucket_size 64;
6 ...
7}
8...
保存并关闭文件,当你完成。
接下来,测试以确保您的任何 Nginx 文件中没有语法错误:
1sudo nginx -t
如果没有任何问题,请重新启动 Nginx 以启用您的更改:
1sudo systemctl restart nginx
您可以通过导航到http://your_domain
,在那里您应该看到这样的东西:
步骤 6 – 熟悉重要的 Nginx 文件和目录
现在你知道如何管理 Nginx 服务本身,你应该花几分钟来熟悉一些重要的目录和文件。
内容
/var/www/html
:实际的网页内容,默认情况下仅由您之前看到的默认 Nginx 页面组成,从/var/www/html
目录中提供。
服务器配置
/etc/nginx
: Nginx 配置目录. 所有 Nginx 配置文件都位于此处./etc/nginx/nginx.conf
: 主要的 Nginx 配置文件. 这可以被修改为对 Nginx 全球配置进行更改./etc/nginx/sites-available/
: 可以存储每个站点的服务器块的目录. Nginx 不会使用本目录中找到的配置文件,除非它们链接到sites-enabled
目录。 通常,所有服务器块配置都在本目录中进行,然后通过链接到其他目录启用。- `etc/nginx/sites-en
服务器日志
/var/log/nginx/access.log
:在这个日志文件中记录到您的 Web 服务器的每一个请求,除非 Nginx 已配置为另行。
结论
现在你已经安装了你的Web服务器,你有许多选择的内容类型来服务和你想要使用的技术来创建一个更丰富的体验。
如果您想构建一个更完整的应用程序堆栈,请参阅文章 How To Install Linux, Nginx, MySQL, PHP (LEMP Stack) on Ubuntu 20.04。
为了为您的域名设置HTTPS,使用免费的SSL证书使用 Let’s Encrypt,您应该继续到 How To Secure Nginx with Let’s Encrypt on Ubuntu 20.04。