我正在尝试自动化 Let's Encrypt 证书续订过程。所以我正在尝试使用 webroot 身份验证方法。但我遇到了一个绊脚石。在试图找出问题所在时,这就是我所做的。
在我的站点配置中,我为 acme 挑战添加了一个位置块:
location /.well-known/acme-challenge {
default_type "text/plain";
alias /tmp/letsencrypt;
}
作为letsencrypt脚本的diea将用于/tmp/lestencrypt
存储必要的文件。但是,为了测试这一点,我创建了子文件夹letsencrypt
并将其更改为 777。然后我创建了一个名为test
“testing”的文件并将其更改为 777。
现在,如果我尝试访问domain.com/.well-known/acme-challenge/test
,我会收到 404 响应。查看我的错误日志,我看到以下行:
2015/12/11 17:38:06 [error] 26593#0: *11 open() "/tmp/letsencrypt/test" failed (2: No such file or directory), client: x.x.x.x, server: domain.com, request: "GET /.well-known/acme-challenge/test HTTP/1.1", host: "domain.com"
我知道该文件存在,并且任何人都应该可以读取它,现在我已将权限设置为 777。那么为什么 nginx 找不到它呢?
你拼错了letsencrypt,这可能是你的问题。在您的描述中,您写了“leSTencrypt”,在日志中写了“leTSencrypt”。
您还可以检查这个nginx unix domain socket error 看起来有些发行版出于安全原因对每个服务使用单独的 /tmp 目录。尝试将您的目录放在不同的位置,看看它是否会起作用。例如,您可以创建另一个具有相同权限的“tmp”,
mkdir /tmpnew chmod 1777 /tmpnew
然后使用它来查看会发生什么。我能想到的另一个原因是您的 nginx 在 chrooted 环境中运行。