在 Ubuntu 20.04 如何使用 Let's Encrypt 结合 Nginx 配置 https
Let's Encrypt 是一个证书颁发机构 (CA),它提供了一种简单的方法来获取和安装免费的 TLS/SSL 证书,从而在 Web 服务器上启用加密的 HTTPS。 它通过提供软件客户端 Certbot 来简化流程,该客户端尝试自动化大部分(如果不是全部)所需步骤。 目前,获取和安装证书的整个过程在 Apache 和 Nginx 上都是完全自动化的。
在本教程中,我们将使用 Certbot 在 Ubuntu 20.04 上为 Nginx 获取免费的 SSL 证书,并将证书设置为自动更新。
我们将使用单独的 Nginx 服务器配置文件而不是默认文件。 我们建议为每个域创建新的 Nginx Server块文件,因为它有助于避免常见错误并且可以维护默认文件使其作为备用的配置。
在正式进入教程之前,我们需要以下前提条件:
- 设置一台 Ubuntu 20.04 服务器,包括启用 sudo 的非 root 用户和防火墙。
- 一个注册的域名。 本篇文章将使用 example.com。 我们可以从 Namecheap 购买一个域名,通过 Freenom 免费获得一个,或者使用其他的域名注册商。
- 为服务器设置了以下两个 DNS 记录。
- 带有 example.com 的 A 记录指向服务器的公共 IP 地址。
- www.example.com 的 A 记录指向服务器的公共 IP 地址。
- 按照 如何在 Ubuntu 20.04 上安装 Nginx 一文中介绍的方式 安装 Nginx。 确保域有一个Server块。 本篇文章将使用 /etc/nginx/sites-available/example.com 作为示例。
步骤一、安装 Certbot
使用 Let's Encrypt 获取 SSL 证书的第一步是在服务器上安装 Certbot 软件。
使用 apt 安装 Certbot 和它的 Nginx 插件:
$ sudo apt install certbot python3-certbot-nginx
Certbot 现在可以使用了,但是为了让它自动为 Nginx 配置 SSL,我们需要验证 Nginx 的一些配置。
步骤二、确认 Nginx 的配置
Certbot 需要能够在 Nginx 配置中找到正确的 Server 块,才能自动配置 SSL。 具体来说,它通过查找与我们为其请求证书的域匹配的 server_name 指令来做到这一点。
如果按照 Nginx 安装教程中的Server块设置步骤进行操作,我们应该在 /etc/nginx/sites-available/example.com 中为域设置一个 Server 块,并且已经正确设置了 server_name 指令。
要检查配置的内容,请使用 nano 或你自己喜欢的文本编辑器打开域的配置文件:
$ sudo nano /etc/nginx/sites-available/example.com
找到现有的 server_name 行。 它应该如下所示:
/etc/nginx/sites-available/example.com
... server_name example.com www.example.com; ...
如果是,请退出编辑器并继续下一步。
如果没有,则需要更新文件使其可以匹配。 然后保存文件,退出编辑器,并验证配置编辑的语法是否存在错误:
$ sudo nginx -t
如果出现错误,请重新打开 Server 块文件并检查是否有任何拼写错误或缺少字符。 配置文件语法正确后,重新加载 Nginx 以加载新配置:
$ sudo systemctl reload nginx
Certbot 现在可以找到正确的 Server 块并自动更新它。
接下来,让我们更新防火墙从而允许 HTTPS 的访问。
步骤三、允许 HTTPS 通过防火墙
如果按照上面说的前提条件建议启用了 ufw 防火墙,则需要调整设置从而使其允许 HTTPS 流量。 幸运的是,Nginx 在安装时向 ufw 注册了一些配置文件。
我们可以通过键入以下内容查看当前设置:
$ sudo ufw status
它可能看起来像这样,这意味着只允许 HTTP 流量进入 Web 服务器:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
要额外允许 HTTPS 流量,请允许 Nginx Full 配置文件并删除多余的 Nginx HTTP 配置文件:
$ sudo ufw allow 'Nginx Full'
$ sudo ufw delete allow 'Nginx HTTP'
状态现在应该如下所示:
$ sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
接下来,让我们运行 Certbot 并获取我们的证书。
步骤四、获取 SSL 证书
Certbot 提供了多种通过插件获取 SSL 证书的方式。 Nginx 插件将负责重新配置 Nginx 并在必要时重新加载配置。 要使用此插件,请键入以下内容:
$ sudo certbot --nginx -d example.com -d www.example.com
这使用 --nginx 插件运行 certbot,使用 -d 指定我们希望证书有效的域名。
如果这是第一次运行 certbot,系统将提示我们输入电子邮件地址并同意服务条款。 完成此操作后,certbot 将与 Let's Encrypt 服务器进行通信,然后验证我们是否对要为其请求证书的域有控制权限。
如果成功,certbot 会询问我们希望如何配置 HTTPS 设置。
Output
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
选择之后,然后按 ENTER。 配置将被更新,Nginx 将重新加载以获取新设置。 certbot 将以一条消息结束,告诉我们该过程成功以及证书存储在哪里:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2020-08-18. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
证书已下载、安装和加载。 尝试使用 https:// 重新加载网站,并注意浏览器的安全指示器。 它应该表明该站点得到了适当的保护,通常带有一个锁定图标。 如果使用 SSL Labs Server Test 测试我们的服务器,它将获得 A 级。
让我们通过测试更新过程来结束本篇内容。
步骤五、验证 Certbot 自动续订
Let's Encrypt 的证书有效期只有九十天。 这是为了鼓励用户自动化他们的证书更新过程。 我们安装的 certbot 包通过添加一个 systemd 计时器来为我们解决这个问题,该计时器每天运行两次,并自动更新到期后 30 天内的任何证书。
我们可以使用 systemctl 查询计时器的状态:
$ sudo systemctl status certbot.timer
显示结果如下所示
● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago
Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left
Triggers: ● certbot.service
要测试续订过程,我们可以使用 certbot 进行试运行:
$ sudo certbot renew --dry-run
如果没有看到任何错误,则一切就绪。 必要时,Certbot 将更新证书并重新加载 Nginx 以获取更改。 如果自动续订过程失败,Let's Encrypt 将向我们指定的电子邮件发送一条消息,在证书即将到期时警告我们。
总结
在本篇文章中,我们介绍了安装了 Let's Encrypt 客户端 certbot,为我们的域名下载 SSL 证书,配置 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 容器。
使用 JavaScript 从 URL 中删除 http 或 https
发布时间:2022/11/28 浏览次数:191 分类:JavaScript
-
要从 url 中删除 http:// 或 https:// ,请使用以下正则表达式调用 replace() 方法 - /^https?:\/\// 和一个空字符串作为参数。 replace 方法将返回一个新字符串,其中 http:// 部分已被删除。 functi
在 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 的定义格式来创建配置。 这种格式随着时间的推移通过添加、删除或更改关键