为Caddy的https配置使用cloudflare的证书

掉进了不少坑,简单记录一下过程

说一下环境,我是windows系统使用caddy
https://caddyserver.com/v1/download
(本文章需要,下载caddy时必须选择 tls.dns.cloudflare http.filter 组件 )

折腾这个事情的原因:
caddy 使用默认的配置https证书时,提示超过限制

2020/01/21 16:51:21 failed to obtain certificate: acme: error: 429 :: POST :: https://acme-v02.api.letsencrypt.org/acme/new-order :: urn:ietf:params:acme:error:rateLimited :: Error creating new order :: too many failed a
uthorizations recently: see https://letsencrypt.org/docs/rate-limits/, url:

经过下面这个页面看,其实也没有超过限制啊,不过没办法,只能寻求其它方法,

https://crt.sh/?q=域名

换一家DNS服务商 ! 经查询,发现caddy支持的证书提供机构还不少,看看这里

https://caddyserver.com/v1/docs/automatic-https#dns-challenge

随便选择了cloudflare: (这是下载caddy时选 tls.dns.cloudflare 的原因)
为Caddy的https配置使用cloudflare的证书_第1张图片
按文档要求需要配置环境变量

CLOUDFLARE_EMAIL
CLOUDFLARE_API_KEY

如果是linux服务器,只需要在
caddy.service这个文件里配置就行(修改文件)

[Service]
...
Environment=CLOUDFLARE_EMAIL=XXXX
Environment=CLOUDFLARE_API_KEY=XXXXX

如果是windows下的,需要配置系统级变量(在cmd下执行命令)

set CLOUDFLARE_EMAIL=XXXX
set CLOUDFLARE_API_KEY=XXXXX

接下来就是如何申请cloudflare的CLOUDFLARE_API_KEY 了。
第一步:打开 https://dash.cloudflare.com/ 注册账号 https://dash.cloudflare.com/sign-up ,如果有账号就直接登录https://dash.cloudflare.com/login
第二步:必须将你的域名搬过来。 例如我的域名 example.com 本来是阿里云的域名,按照cloudflaer的提示:登录阿里云控制台,域名-》管理-》“DNS修改”-》当前DNS服务器-》 修改DNS服务器 :

izabella.ns.cloudflare.com
kyrie.ns.cloudflare.com

为Caddy的https配置使用cloudflare的证书_第2张图片
第三步: 在cloudflare等check结果,大概等了几分钟刷新页面(页面提示24小时),cloudflare这边通过了,还是非常快的
为Caddy的https配置使用cloudflare的证书_第3张图片
第四步:右上角点用户 头像“my profile”,然后页面中上部 “API tokens”,

这里我犯了个错误:
“create token”,
不确定这一步是否必须,但是我先做了,建了个
为Caddy的https配置使用cloudflare的证书_第4张图片
然后拷贝了token 作为CLOUDFLARE_API_KEY,用于caddy,结果报错:
API Error 6103


:49:28 [WARN] [wiki.example.com] acme: error cleaning up: cloudflare: failed to find zone example.com.: ListZonesContext command failed: error from makeRequest: HTTP status 400: content "{\"success\":false,\"error
":6003,\"message\":\"Invalid request headers\",\"error_chain\":[{\"code\":6103,\"message\":\"Invalid format for X-Auth-Key header\"}]}],\"messages\":[],\"result\":null}"

:49:29 [INFO] Deactivating auth: https://acme-v02.api.letsencrypt.org/acme/authz-v3/2396700884

:49:30 failed to obtain certificate: acme: Error -> One or more domains had a problem:
t] [wiki.example.com] acme: error presenting token: cloudflare: failed to find zone example.com.: ListZonesContext command failed: error from makeRequest: HTTP status 400: content "{\"success\":false,\"errors\":[{
,\"message\":\"Invalid request headers\",\"error_chain\":[{\"code\":6103,\"message\":\"Invalid format for X-Auth-Key header\"}]}],\"messages\":[],\"result\":null}"


下面说正确的做法,选择下面“Global API Key”创建一个,这个就是CLOUDFLARE_API_KEY
为Caddy的https配置使用cloudflare的证书_第5张图片
现在我们有了
CLOUDFLARE_EMAIL,是你账号邮箱。CLOUDFLARE_API_KEY是global api key

在windows系统,通过cmd,set设置环境变量后,启动caddy ,Ok啦!

最后展示一下我的完整Caddyfile配置,是代理wiki 和google的

wiki.example.com {
    gzip
    tls {
        dns cloudflare
    }
    proxy / https://zh.wikipedia.org {
        header_upstream X-Real-IP {remote}
        header_upstream User-Agent {>User-Agent}
        header_upstream Accept-Encoding identity
    }
    redir 301 {
        if {path} is /
        /wiki/Wikipedia:首页
    }
    filter rule {
        content_type text/.*
        search_pattern zh.wikipedia.org
        replacement wiki.example.com
    }
    filter rule {
        content_type text/.*
        search_pattern zh.m.wikipedia.org
        replacement m.wiki.example.com
    }
    filter rule {
        content_type text/.*
        search_pattern upload.wikimedia.org
        replacement up.wiki.example.com
    }
}

m.wiki.example.com {
    gzip
    tls {
        dns cloudflare
    }
    proxy / https://zh.m.wikipedia.org {
        header_upstream X-Real-IP {remote}
        header_upstream User-Agent {>User-Agent}
        header_upstream Accept-Encoding identity
    }
    redir 301 {
        if {path} is /
        /wiki/Wikipedia:首页
    }
    filter rule {
        content_type text/.*
        search_pattern zh.wikipedia.org
        replacement wiki.example.com
    }
    filter rule {
        content_type text/.*
        search_pattern zh.m.wikipedia.org
        replacement m.wiki.example.com
    }
    filter rule {
        content_type text/.*
        search_pattern upload.wikimedia.org
        replacement up.wiki.example.com
    }
}

up.wiki.example.com {
    gzip
    tls {
        dns cloudflare
    }
    proxy / https://upload.wikimedia.org {
        header_upstream X-Real-IP {remote}
        header_upstream User-Agent {>User-Agent}
    }
}



google.example.com {
    gzip
    tls {
        dns cloudflare
    }
    proxy / https://www.google.com {
        header_upstream X-Real-IP {remote}
        header_upstream User-Agent {>User-Agent}
        header_upstream Accept-Language zh-CN
        header_upstream Accept-Encoding identity
    }
    filter rule {
        content_type text/.*
        search_pattern www.google.com
        replacement google.example.com
    }
    filter rule {
        content_type text/.*
        search_pattern (www|ssl).gstatic.com
        replacement gstatic.example.com
    }
    filter rule {
        content_type text/.*
        search_pattern zh.wikipedia.org
        replacement wiki.example.com
    }
    filter rule {
        content_type text/.*
        search_pattern zh.m.wikipedia.org
        replacement m.wiki.example.com
    }
}
gstatic.example.com {
    gzip
    tls {
        dns cloudflare
    }
    proxy / https://www.gstatic.com {
        header_upstream X-Real-IP {remote}
        header_upstream User-Agent {>User-Agent}
    }
}

你可能感兴趣的:(Caddy,服务器配置)