我是靠谱客的博主 陶醉黑米,最近开发中收集的这篇文章主要介绍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 容器名称

最后

以上就是陶醉黑米为你收集整理的docker nginx 使用docker letsencrypt生成证书 不重启nginx更新的全部内容,希望文章能够帮你解决docker nginx 使用docker letsencrypt生成证书 不重启nginx更新所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部