letsencrypt renew的认证路径
在某些重定向的配置场景中,所有请求都被proxy到了远端服务器,这时候certbot rewew的时候就因为无法远程操控well-known路径导致认证失败。
解决就是在proxy的本地创建认证目录:
# letsencrypt认证目录
location /.well-known/ {
root /data/wwwroot/xxx;
}
location /{
# 其他目录的操作在这里
}
在某些重定向的配置场景中,所有请求都被proxy到了远端服务器,这时候certbot rewew的时候就因为无法远程操控well-known路径导致认证失败。
解决就是在proxy的本地创建认证目录:
# letsencrypt认证目录
location /.well-known/ {
root /data/wwwroot/xxx;
}
location /{
# 其他目录的操作在这里
}
当我们使用letsencrypt时,我们会使用renew来自动续期免费证书,从而实现永久的免费证书使用。
在某些域名的重定向场景,我们通过 location和proxy方式将某一个子域名重定向到新的子域名下。这种情况下我们的https证书一般是挂在原域名下的,但是因为我们是从根域名就重定向了,这就导致letsencrypt在renew过程中验证webroot会失败,因为域名的访问是走proxy路径的。
我们给letsencrypt专门配置一个对应子域名能web访问的路径,并且将配置项放在前面,因为nginx的location是按照顺序匹配的,一旦达成就会退出location过程,所以就实现了对letsencrypt路径专门做映射管理的目的。
letsencrypt的check路径如下:
https://xxx.xxx.com/.well-known/acme-challenge/xxxx
所以我们的nginx location 路径配置如下
location /.well-known/ {
root /xxxxx;
}
其中的root路径就是子域名所对应的可访问web本地路径,这个路径是专门为了renew创建的。这样就保证了letsencrypt的renew同时保证了子域名的其他业务路径正常proxy。
修改配置后,切记重启nginx,否则就要该挠头了:)
letsencrypt 过程中出现:
Challenge failed for domain xxx 的错误
经过搜索和分析,发现是:
验证证书的过程是走http的80端口,而我因为不用80,所以没有开放80导致。