使用Nginx结合CertBot配置HTTPS协议

本文涉及的产品
.cn 域名,1个 12个月
简介: Nginx结合CertBot配置HTTPS协议,同时简单介绍cron定时规则

HTTPS 和 Let’s Encrypt、Certbot 的关系

其实 HTTPS 只是 HTTP 的一个拓展,是在 HTTP 的基础上利用 SSL/TLS 来加密数据包的。服务器会给客户端发送一个 Server certificates(服务证书),这个里面包含有服务器的一些信息,如域名、公司信息、序列号和签名信息组成等,这个证书可以个人生成,也可以由权威机构签发,当然个人的就不受大众信任,而权威机构签发的证书则会被信任。

而 CA 的证书提供商有许多个,有收费的有免费的,Let’s Encrypt 就是其中之一的免费提供商,它提供 90 天的免费授权,90 天后可以免费续签。要从 Let's Encript 获取某个域名的证书,需要证明你对该域名拥有控制权,对于该证明你可以使用某个使用 ACME 协议的软件来实现,而 Certbot 就是官方出的一个 ACME 客户端。

Certbot 安装

官网: https://certbot.eff.org

官方安装文档: https://certbot.eff.org/lets-encrypt/centosrhel7-nginx

Certbot 打包在 EPEL Enterprise Linux(企业版 Linux 的扩展包)上。使用 Certbot,必须先开启 EPEL 仓库。
在 RHEL 或 Oracle Linux 中,还要必须开启可选频道。可以执行如下命令安装 Certbot

sudo yum install epel-release
sudo yum install certbot

其实到这步 certbot 就算安装好了

生成证书

我们需要配置 Nginx 来做服务器域名验证,因为 CertBot 的 standalone 模式虽然可以配置好服务器,但是每次 90 天到期续签的时候,需要让服务停止一下,再启动。因此我们改用 Webroot 配置模式来验证,Webroot 配置模式下 CertBot 会生成一个随机文件,然后 CertBot 服务器通过 HTTP 的方式访问我们服务器上的这个文件进行验证。所以我们需要配置好 Nginx,以便 CertBot 服务器可以访问到这个随机文件。

修改 Nginx 配置,新增一个 server 模块:

    server {
        listen       80;
        server_name  your.domain.com; #这里填你要验证的域名

        location ^~ /.well-known/acme-challenge/ {
            default_type "text/plain";
            root     /usr/share/nginx/html/; #这里需要与后文 --webroot -w 后面配置的路径一致
        }
    }

ok,重启 Nginx

sudo service nginx reload

然后执行

sudo certbot certonly --webroot -w /usr/share/nginx/html/ -d your.domain.com

记得替换 your.domain.com 为你自己的域名。

如果看到有提示:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/your.domain.com/fullchain.pem. Your cert
   will expire on 20XX-09-23. To obtain a new or tweaked version of
   this certificate in the future, simply run certbot again. 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

证书生成成功!

接着可以开始启用 443 端口

修改 Nginx 的配置文件,新建一个 443 端口的 server 配置:

server {
    listen 443 ssl;
    listen [::]:443 ssl ipv6only=on;

    ssl_certificate /etc/letsencrypt/live/your.domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your.domain.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/your.domain.com/chain.pem;

    // ... other settings ...
}

记得替换 your.domain.com 为你自己的域名哦。

重启 Nginx

sudo service nginx reload

这时候的网站基本完成免费 HTTPS 证书的设置。成功!

删除证书

如果因为种种原因不小心生成了多余的证书,他会存在于我们的服务器中,导致无用的冗余。可是官方其实并没有提供取消授权的方式,我们可以在本地删除授权证书,并且不再续签,便可以释放该证书了,我们需要进入对应的文件夹内,查看自己已经生成的证书域名文件夹,然后依次删除就好,记得替换 your.domain.com 为你要删除的域名哦:

cd /etc/letsencrypt/live/
ls
sudo rm -rf /etc/letsencrypt/live/your.domain.com/ 
sudo rm -rf /etc/letsencrypt/archive/your.domain.com/
sudo rm /etc/letsencrypt/renewal/your.domain.com.conf

设置自动更新

由于这个免费证书的时效只有 90 天,所以我们需要设置自动更新,帮我们自动更新证书的时效。
自动更新可以使用 Linux 系统的 cron 定时任务功能,CentOS 可以使用 crontab 命令

我们先命令行模拟证书更新:

sudo certbot renew --dry-run

如果有提示下面的内容,表示模拟更新成功

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/your.domain.com.conf
-------------------------------------------------------------------------------
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/your.domain.com/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates above have not been saved.)

那么,我们就可以使用crontab -e的命令来启用自动任务,命令行:

sudo crontab -e

然后会打开打开定时任务配置文件,我们可以按i进入编辑模式,然后输入:

30 2 * * * /usr/bin/certbot renew  >> /var/log/le-renew.log

上面的执行时间为:每天凌晨2点30分执行renew任务。

现在可以在命令行执行/usr/bin/certbot renew >> /var/log/le-renew.log看看是否执行正常,如果一切OK,那么配置就成功了!大发!

定时任务时间设置

关于定时任务时间的设置,这里可以简单介绍下,定时任务格式如下:

 * * * * * command
分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天) 命令
* * * * * command
    第1列表示分钟1~59 每分钟用*或者 */1表示
    第2列表示小时1~23(0表示0点)
    第3列表示日期1~31
    第4列表示月份1~12
    第5列标识号星期0~6(0表示星期天)
    第6列要运行的命令

在以上任何值中,星号(*)可以用来代表所有有效的值。譬如,月份值中的星号意味着在满足其它制约条件后每月都执行该命令。

整数间的短线(-)指定一个整数范围。譬如,1-4 意味着整数 1、2、3、4。

用逗号(,)隔开的一系列值指定一个列表。譬如,3, 4, 6, 8 标明这四个指定的整数。

正斜线(/)可以用来指定间隔频率。在范围后加上 /< integer > 意味着在范围内可以跳过 integer。譬如,0-59/2 可以用来在分钟字段定义每两分钟。间隔频率值还可以和星号一起使用。例如,*/3 的值可以用在月份字段中表示每三个月运行一次任务。

开头为井号(#)的行是注释,不会被处理

使用实例

实例1:每1分钟执行一次command

* * * * * command

实例2:每小时的第3和第15分钟执行

3,15 * * * * command

实例3:在上午8点到11点的第3和第15分钟执行

3,15 8-11 * * * command

实例4:每隔两天的上午8点到11点的第3和第15分钟执行

3,15 8-11 */2 * * command

实例5:每个星期一的上午8点到11点的第3和第15分钟执行

3,15 8-11 * * 1 command

实例6:每晚的21:30重启smb

30 21 * * * /etc/init.d/smb restart

实例7:每月1、10、22日的4 : 45重启smb

45 4 1,10,22 * * /etc/init.d/smb restart

实例8:每周六、周日的1 : 10重启smb

10 1 * * 6,0 /etc/init.d/smb restart

实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb

0,30 18-23 * * * /etc/init.d/smb restart

实例10:每星期六的晚上11 : 00 pm重启smb

0 23 * * 6 /etc/init.d/smb restart

实例11:每一小时重启smb

* */1 * * * /etc/init.d/smb restart

实例12:晚上11点到早上7点之间,每隔一小时重启smb

* 23-7/1 * * * /etc/init.d/smb restart

实例13:每月的4号与每周一到周三的11点重启smb

0 11 4 * mon-wed /etc/init.d/smb restart

实例14:一月一号的4点重启smb

0 4 1 jan * /etc/init.d/smb restart

实例15:每小时执行/etc/cron.hourly目录内的脚本

01   *   *   *   *     root run-parts /etc/cron.hourly
相关文章
|
15天前
|
应用服务中间件 BI nginx
Nginx的location配置详解
【10月更文挑战第16天】Nginx的location配置详解
|
23天前
|
缓存 负载均衡 安全
Nginx常用基本配置总结:从入门到实战的全方位指南
Nginx常用基本配置总结:从入门到实战的全方位指南
210 0
|
8天前
|
应用服务中间件 API nginx
nginx配置反向代理404问题
【10月更文挑战第18天】本文介绍了使用Nginx进行反向代理的配置方法,解决了404错误、跨域问题和302重定向问题。关键配置包括代理路径、请求头设置、跨域头添加以及端口转发设置。通过调整`proxy_set_header`和添加必要的HTTP头,实现了稳定的服务代理和跨域访问。
nginx配置反向代理404问题
|
1天前
|
安全 应用服务中间件 网络安全
49.3k star,本地 SSL 证书生成神器,轻松解决 HTTPS 配置痛点
mkcert是一款由Filippo Valsorda开发的免费开源工具,专为生成受信任的本地SSL/TLS证书而设计。它通过简单的命令自动生成并安装本地信任的证书,使本地环境中的HTTPS配置变得轻松无比。mkcert支持多个操作系统,已获得49.2K的GitHub Star,成为开发者首选的本地SSL工具。
|
2天前
|
应用服务中间件 网络安全 PHP
八个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
Nginx 是一个高效的 HTTP 服务器和反向代理,擅长处理静态资源、负载均衡和网关代理等任务。其配置主要通过 `nginx.conf` 文件完成,但复杂设置可能导致错误。本文介绍了几个开源的 Nginx 可视化配置系统,如 Nginx UI、VeryNginx、OpenPanel、Ajenti、Schenkd nginx-ui、EasyEngine、CapRover 和 NGINX Agent,帮助简化和安全地管理 Nginx 实例。
|
12天前
|
缓存 负载均衡 应用服务中间件
Nginx配置
【10月更文挑战第22天】在实际配置 Nginx 时,需要根据具体的需求和环境进行调整和优化。同时,还需要注意配置文件的语法正确性和安全性。
31 7
|
21天前
|
前端开发 JavaScript 应用服务中间件
终极 Nginx 配置指南
本文介绍了Nginx的基本配置及其优化方法。首先,通过删除注释简化了Nginx的默认配置文件,使其更易于理解。接着,文章将Nginx配置文件分为全局块、events块和http块三部分进行详细解释。此外,还提供了如何快速上线网站、解决前端history模式404问题、配置反向代理、开启gzip压缩、设置维护页面、在同一IP上部署多个网站以及实现动静分离的具体配置示例。最后,附上了Nginx的基础命令,包括安装、启动、重启和关闭等操作。
|
23天前
|
缓存 前端开发 JavaScript
一、nginx配置
一、nginx配置
127 1
|
22天前
|
JavaScript 前端开发 应用服务中间件
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
112 0
|
27天前
|
应用服务中间件 Linux nginx
Jetson 环境安装(四):jetson nano配置ffmpeg和nginx(亲测)之编译错误汇总
这篇文章是关于在Jetson Nano上配置FFmpeg和Nginx时遇到的编译错误及其解决方案的汇总。
73 4