掉进了不少坑,简单记录一下过程
说一下环境,我是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 的原因)
按文档要求需要配置环境变量
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
第三步: 在cloudflare等check结果,大概等了几分钟刷新页面(页面提示24小时),cloudflare这边通过了,还是非常快的
第四步:右上角点用户 头像“my profile”,然后页面中上部 “API tokens”,
(
这里我犯了个错误:
“create token”,
不确定这一步是否必须,但是我先做了,建了个
然后拷贝了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
现在我们有了
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}
}
}