我正在尝试自动化 Let's Encrypt 证书更新过程。因此,我尝试使用 webroot 身份验证方法。但我遇到了一个障碍。为了找出问题所在,我做了以下事情。
在我的网站配置中,我为 acme 挑战添加了一个位置块:
location /.well-known/acme-challenge {
default_type "text/plain";
alias /tmp/letsencrypt;
}
diea 是 letsencrypt 脚本,将用于/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 找不到它呢?
答案1
您拼错了 letsencrypt,这可能是您的问题。在您的描述中,您写的是“leSTencrypt”,但在日志中却是“leTSencrypt”。
您还可以查看此内容nginx unix 域套接字错误
看起来有些发行版出于安全原因对每个服务使用单独的 /tmp 目录。尝试将您的目录放在不同的地方,看看是否可行。例如,您可以创建另一个具有相同权限的“tmp”,
mkdir /tmpnew chmod 1777 /tmpnew
然后使用它来查看会发生什么。
我能想到的另一个原因是您的 nginx 在 chrooted 环境中运行。