使用docker+nginx+certbot获取和更新免费的ssl证书

本文详细介绍了如何在Nginx和Docker环境中使用Certbot获取和更新免费SSL证书,包括安装Certbot、设置文件映射、配置nginx、执行自动证书续期等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Nginx+docker+Certbot 获取和更新免费的ssl证书

certbot官网:https://certbot.eff.org/(需要魔法)
下载docker:https://www.runoob.com/docker/centos-docker-install.html

开始前准备

1、用docker下载和准备certbot

docker run -it --rm certbot/certbot --help

2、用docker下载nginx镜像
镜像

3、购买好了域名 并且ICP备案了
然后你的域名DNS打开了 比如你买的主域名的xxx.com 你的DNS打开了www.xxx.com
在这里插入图片描述

开始步骤

1、理清docker nginx和certbot文件映射关系,做好文件映射

nginx和certbot有两个文件夹要共用:证书生成文件夹和web验证文件夹

容器启动命令如下

(1)准备nginx的启动脚本
这里使用了docker run 语法挂载docker的nginx的配置文件

docker run   --rm -p 80:80 -p 443:443  --name nginx --privileged=true \
-v /nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ #挂载nginx的配置文件 我这里直接挂载配置文件出来 你们也可以挂整个文件夹 这个nginx.conf是文件 不是文件夹 所以要先在自己目录下创好 不然挂挂载会有问题
-v /nginx/html:/etc/nginx/html \#挂载nginx的静态html
-v /nginx/log:/var/log/nginx \ #挂载nginx的log
-v /nginx/docker/certbot/www:/usr/share/certbot/www \ #与certbot容器共用,http验证目录
-v /nginx/docker/certbot/ssl:/usr/share/certbot/ssl \ #与certbot容器共用,证书位置
 -d  nginx \#这个nginx是你的镜像名称

(2)准备certbot的启动脚本
这里使用了docker run 语法挂载docker的certbot的配置文件

 docker run -it --rm   \
 -v /nginx/docker/certbot/www:/data/letsencrypt  \ #与nginx容器共用
 -v /nginx/docker/certbot/ssl:/etc/letsencrypt  \#与nginx容器共用
 -v /nginx/docker/certbot/logs:/var/log/letsencrypt \ #挂载日志文件
 certbot/certbot certonly -n --webroot --webroot-path=/data/letsencrypt -m 你的邮箱@qq.com --agree-tos -d "你的域名"  

2、启动nginx(上面的nginx启动脚本),修改挂载的域名配置文件/nginx/conf/nginx.conf
修改你的配置文件的80端口(默认只有80端口) ,如果你有443端口的就注释掉

    server {
    listen 80;
    listen [::]:80;

    server_name  xxx.com;#你的域名
    server_tokens off;

    #配置http验证可访问
    location ~/.well-known/acme-challenge/ {
        #此目录都是nginx容器内的目录,对应宿主机volumes中的http验证目录,而宿主机的又与certbot容器中命令--webroot-path指定目录一致,从而就整个串起来了,解决了http验证问题
        root /usr/share/certbot/www;
    }
    #http跳转到https
    location / {
        return 301 https://xxx.com$request_uri; #xxx.com换成你的域名
    }
    #配置文件汇总其它的先不要 注释掉
}

3、重启你的nginx

docker restart nginx

4、执行certbot容器命令(在步骤1中准备好了)

如无意外会出现succee提示,证书创建成功了
5、修改conf.d中的网站配置文件,增加ssl配置

注意:这里的证书地址为nginx里的地址,不要填成宿主机地址

    server {
        listen       80;
        listen       [::]:80;
        rewrite ^(.*)$ https://$host$1 permanent; #将80端口转发到443
        }
    server { #http服务,一个server可以配置多个location
        listen    443 ssl;
        server_name www.xxx.com; #主机名、域名
        server_tokens off;
        ssl_certificate       /usr/share/certbot/ssl/live/www.wangyuhaooo.cn/fullchain.pem;      #证书里面,必须是包含两套完整的-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----
        ssl_certificate_key  /usr/share/certbot/ssl/live/www.wangyuhaooo.cn/privkey.pem;         #证书密钥文件
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;

        #charset koi8-r;
        #access_log  /var/log/nginx/host.access.log  main;
        location /{
                root  /etc/nginx/html/; #这个路径是docker的nginx里面的静态文件路径 不是本地服务器的静态文件路径
                index index.html ;
        }
   }

6、重启nginx,查看日志,打开域名测试

docker restart nginx
docker logs -tf --tail 20 nginx

certbot的证书只有三个月时间 所以要写一个重启脚本
更新证书脚本如下:

renew_cert.sh

docker run -it --rm   \
    -v /nginx/docker/certbot/www:/data/letsencrypt  \     #与nginx容器共用,http验证目录
    -v /nginx/docker/certbot/ssl:/etc/letsencrypt  \     #与nginx容器共用,证书生成目录
    -v /nginx/docker/certbot/logs:/var/log/letsencrypt \  #certbot日志
certbot/certbot renew

把 renew_cert.sh 脚本放入Linux的crontab即可,每三月执行一次就可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值