docker nginx 使用docker letsencrypt生成证书 不重启nginx更新

1:使用docker启动的nginx,如何使用letsencrypt整成ssl证书

在工作中,nginx必不可少,另一个就是https配置,如何生成免费的ssl证书,并且在不重启nginx的情况下使用letsencrypt生成和更新证书呢?下边分两部分记录我的操作过程

使用token方式验证证书,好处是不需要单独占用80端口,不需要停止nginx,但是相应的,需要再server中配置访问,才能进行验证

文中使用的docker镜像:certbot/certbot

文中有什么不对的地方,随时评论,我进行完善。

2:使用docker letsencrypt生成证书,单独启动80端口验证的方式

此方式会启动一个web服务,占用80端口,并且your_domain能在外网访问到这个服务,好处是不需要其他的支持,只要没有占用80端口即可

docker run --rm -p 80:80 -p 443:443 -v /etc/letsencrypt/:/etc/letsencrypt/ certbot/certbot auth --standalone -m your_email --agree-tos -d your_domain

your_email:通知邮箱
your_domain:要生成ssl证书的域名,需要域名已经解析,并且外网能通过此域名访问到当前服务器的80端口
–standalone 启动一个web服务,以供letsencrypt验证

3:使用docker letsencrypt生成证书,使用token验证方式

此方式验证域名,不需要单独启动web服务,会在本地生成一个token,保存在本地文件,需要通过占用80端口的服务进行映射,使letsencrypt服务器能正常访问到这个token文件,即可验证成功

docker run --rm -it -v /etc/letsencrypt:/etc/letsencrypt certbot/certbot certonly --webroot --email your_email --agree-tos --no-eff-email --webroot-path=/etc/letsencrypt -d your_domain

-v /etc/letsencrypt:/etc/letsencrypt:(本地路径:容器内路径)将容器内部的路径映射到本地路径,以供其他服务访问
your_email:通知邮箱
your_domain:要生成ssl证书的域名,需要域名已经解析,并且外网能通过此域名访问到当前服务器的80端口
其他参数含义请自行百度

对应nginx的docker-compose.yml配置

version: '3'
services:
  nginx:
    image: nginx
    container_name: nginx
    volumes:
      - /etc/letsencrypt:/etc/letsencrypt
      - ./conf.d:/etc/nginx/conf.d
      - ./html:/html:ro
    ports:
      - 80:80
      - 443:443
    environment:
      - TZ=Asia/Shanghai

/etc/letsencrypt:/etc/letsencrypt:将letsencrypt生成的证书文件,映射到docker容器内部

server配置

server {
    listen       80;
    server_name  your_domain;
    listen       443 ssl;
    ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
    # 用于letsencrypt的证书认证。高优先级。所有需要ssl的server都需要添加次配置
    location ~ /.well-known/acme-challenge {
        allow all;
        root /etc/letsencrypt;
    }
}

your_domain:要生成ssl证书的域名,需要改成自己的域名
首次生成证书,需要将ssl_certificate和ssl_certificate_key注释,因为没有这个文件,nginx无法启动
存在证书文件后,后续即可正常访问和使用

更新证书

证书的有效期为90天,那么就意味着我们需要再90天内更新证书,证书更新时letsencrypt会验证当前证书是不是超过60天,如果没有,则不进行更新,如果超过了,则更新证书。
也可以强制更新并重置正式的时间

docker run --rm -v /etc/letsencrypt:/etc/letsencrypt certbot/certbot renew --webroot -w /etc/letsencrypt --force-renewal

–force-renewal:强制更新证书,不添加为正常更新
此方法使用token验证方式
更新完成后,在/etc/letsencrypt/archive/your_domain/下看看是不是多了文件
在这里插入图片描述

最后别忘了更新一下nginx:docker kill --signal=HUP 容器名称

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值