ssl证书是必不可少的, 腾讯云申请证书麻烦, 不能使用泛域名, 也不能自动续签, 而acme.sh脚本则能解决这些问题.

大家普遍使用两种方法来安装, 一种是直接在主机上安装, 另一种是使用acme的docker安装, 我发现这两种方法都不好, 于是自创了一种nginx镜像里面集成acme脚本, 我觉得这种方法好.

我使用的是腾讯云, 所以下面贴上配置, 然后慢慢解释下:

Nginx的Docker配置

FROM nginx:1.21.1

#设置本地时区
ENV TZ=Asia/Shanghai

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \
    && echo $TZ > /etc/timezone

#统一主机和容器管理者
RUN groupmod -g <GID> www-data \
    && usermod -u <GID> -g <GID> www-data

# 安装crontab等软件
RUN echo "Acquire::http::Proxy \"<代理>\";" > /etc/apt/apt.conf \
&& apt-get update \
&& apt-get install -y cron openssl socat procps \
&& rm -rf /var/lib/apt/lists/*

# 设置代理并下载acme脚本 然后设置自动更新
RUN export http_proxy="<代理>" \
&& export https_proxy="<代理>" \
&& curl https://get.acme.sh | sh 

#################

# 注册帐号
RUN ~/.acme.sh/acme.sh --register-account -m <邮箱帐号>

# 设置DNSPod帐号密码,使用DNS验证生成证书
RUN export DP_Id="<DP_Id>" \
&& export DP_Key="<DP_Key>" \
&& ~/.acme.sh/acme.sh --issue \
--dns dns_dp \
-d dzketang.com \
-d '*.dzketang.com' \
-d dunfu.top \
-d '*.dunfu.top'


# 刷新
ENV REFRESH_TIME 20230424

# 添加安装证书脚本
ADD ./docker/nginx/reload.sh /root/reload.sh 

# 创建证书文件夹并安装证书
RUN mkdir -p /var/www/certificate \
&& chmod +x /root/reload.sh \
&& ~/.acme.sh/acme.sh --install-cert -d dzketang.com \
--key-file        /var/www/certificate/certificate.key \
--fullchain-file  /var/www/certificate/certificate.crt \
--reloadcmd  /root/reload.sh

# 设置acme脚本自动更新
RUN ~/.acme.sh/acme.sh --upgrade --auto-upgrade

Nginx的Docker配置解释

  1. 如果是国内服务器必须要使用代理, 否则根本安装不了.

  2. issue多域名泛域名生成的证书只有一张(这个是重点), 以上4个域名是共用一张证书的, acme作者说了, --install-cert命令只会记录最后一个, 如果不是共用一张证书, 就要多次执行--install-cert命令, 脚本只会记录最后一个--install-cert命令, 那么根本不能实现自动续签, 所以四个域名共用一张证书很合理.

  3. 共用的证书会生成到第一个issue的域名下, 所以我在执行--install-cert时, -d后面的参数是第一个域名.

2023-04-25-10-15-13

2023-04-25-10-15-30

  1. 我没有创建acme.sh别名, 所以每次执行命令时要使用全路径~/.acme.sh/acme.sh

  2. 使用issue生成证书时, 会出现curl的错误, 我估计是curl原装版本太低, curl的证书不支持, 解决方法应该是安装curl的高版本, 或则curl使用时禁用检查. 暂时看上去没什么影响就没管, 知道的兄弟说一下如何解决.

2023-04-25-10-17-59

  1. 必须使用脚本重启, 在nginx没启动时使用启动命令, 在nginx启动后使用重载命令.

  2. 使用泛域名前必须要先使用主域名, 不能直接使用泛域名.

2023-04-25-10-24-48

  1. 泛域名验证必须使用DNS验证

  2. 申请 DNSPod Token地址

reload脚本

#! /bin/bash

nginx_procnum=`ps -ef|grep "nginx"|grep -v grep|wc -l`
 
if [ $nginx_procnum -eq 0 ]
then
    echo "start nginx..."
    /etc/init.d/nginx start
else 
    echo "reload nginx"
  nginx -s reload
fi

参考资料

docker-compose + acme.sh + nginx 签署 ssl 证书

acmesh-official/acme.sh

Curl 设置代理,看这篇就够了

零依赖!使用acme.sh设置nginx多个https证书自动更新,无限续期https证书

使用Let’s encrypt免费SSL证书(好文)

使用 acme.sh 配置自动续签 SSL 证书

THE END
开启精彩搜索

热门搜索

暂无

历史搜索

用户名/邮箱/手机号
密码
用户名
密码
重复密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
注册
找回密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
新密码
重复密码
请选择支付方式
余额支付

购买将消耗【10

微信支付
微信扫码支付 0 元
[ 04分50秒 ]
请使用微信扫一扫
扫描二维码支付
支付宝支付
支付宝扫码支付 0 元
[ 04分50秒 ]
请使用支付宝扫一扫
扫描二维码支付
已完成支付
未完成支付

请输入验证码

点击验证码可以刷新

你确认吗?

确认

2024年10月1日

2024年10月

新增

新增

新增

新增

新增

新增

新增

新增

新增

新增