概述
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更新所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复