【问题标题】:Nginx configuration, folder permissions and lets-encryptNginx 配置、文件夹权限和 let-encrypt
【发布时间】:2017-03-14 12:16:18
【问题描述】:

我正在尝试在我的 Ubuntu 16.0.4 服务器上使用 certbot and letsencrypt,因此我可以安装邮件服务器。

我正在像这样运行 certbot:

sudo /opt/letsencrypt/certbot-auto certonly --agree-tos --webroot -w /path/to/www/example -d example.com -d www.example.com

我从 certbot 得到以下输出(如下所示的 sn-p):

   Domain: www.example.com
   Type:   unauthorized
   Detail: Invalid response from
   http://www.example.com/.well-known/acme-challenge/QEZwFgUGOJqqXHcLmTmkr5z83dbH3QlrIUk1S3JI_cg:
   "<html>
   <head><title>404 Not Found</title></head>
   <body bgcolor="white">
   <center><h1>404 Not Found</h1></center>
   <hr><center>"

   To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A record(s) for that domain
   contain(s) the right IP address.

这是我的目录结构:

root@yourbox:/path/to/www/example$ ls -la
total 12
drwxr-xr-x 3 example root    4096 Nov  1 10:17 .
drwxr-xr-x 5 root        webapps 4096 Nov  1 10:13 ..
drwxr-xr-x 2 root        root    4096 Nov  1 10:36 .well-known
root@yourbox:/path/to/www/example$ 
root@yourbox:/path/to/www/example$ cd .well-known/
root@yourbox:/path/to/www/example/.well-known$ ls -la
total 8
drwxr-xr-x 2 root        root 4096 Nov  1 10:36 .
drwxr-xr-x 3 example root 4096 Nov  1 10:17 ..
root@yourbox:/path/to/www/example/.well-known$ 

从上面,我可以看到挑战文件不存在 - (大概?)因为,看起来 certbot 无法写入文件夹。

但是,我首先需要检查 nginx 是否设置正确,以及它是否从以句点开头的文件夹中提供文件。

这是网站的 nginx 配置文件(/etc/nginx/sites-available/example):

server {
    # Allow access to the letsencrypt ACME Challenge
    location ~ /\.well-known\/acme-challenge {
        allow all;
    }
}

我手动创建了一个测试文件(sudo touch /path/to/www/example/fake)并赋予它正确的权限:

root@yourbox:/path/to/www/example/.well-known/acme-challenge$ ls -l
total 0
-rw-r--r-- 1 example webapps 0 Nov  1 10:45 fake

然后我尝试从浏览器访问http://www.example.com/.well-known/acme-challenge/fake - 并收到 404 错误。

这意味着我有两个错误:

  1. Nginx 未正确设置以提供来自 .well-known/acme-challenge 文件夹的文件
  2. /path/to/www/example文件夹中的文件权限错误,导致certbot无法将其自动生成的文件写入.well-known/acme-challenge文件夹。

我该如何解决这些问题?

【问题讨论】:

  • 你需要检查/etc/hosts文件,确保那里有正确的记录,并设置正确的权限,例如例如,chown -R www-data:www-data /path/to/www 你的Nginxphp-FPM/Apache 应该在“www-data”用户下工作。

标签: nginx file-permissions ubuntu-16.04 lets-encrypt certbot


【解决方案1】:

您的 Nginx 配置文件没有配置可让您的 /path/to/www/example/ 目录可通过网络访问。

这是一个简单的配置,可以让您的网站上线并允许 LetsEncyrpt 创建一个有效的证书。请记住端口 80 需要可访问。

server {
    listen 80;

    server_name www.example.co.uk example.co.uk;

    root /path/to/www/example;

    access_log /var/log/nginx/example.co.uk.log;
    error_log /var/log/nginx/example.co.uk.log;

    index index.html index.htm index.php;

    location ~ /\.well-known\/acme-challenge {
        allow all;
    }

    location / {
        try_files $uri $uri/index.html $uri.html =404;
    }
}

相应地更改您的 server_name,或使用您的 /etc/hosts 文件来配置本地域。

【讨论】:

  • 我现在正在工作。我回家后会检查您的解决方案,并在到期前奖励赏金。谢谢
  • 我远程登录到我的机器并进行了您建议的更改。我仍然收到提示我问题的相同错误消息。我做了以下进一步修改:1. 递归地将/path/to/www/example 的所有权更改为 www-data:www-data(尽管我认为这会带来安全风险2.使用suso -H 运行letsencrypt 脚本。加密脚本没有在.well-known 文件夹下创建acme-challenge 文件夹。当我收到与以前相同的错误消息时,我“触摸”了./well- 中的一个空文件known/acme-challenge/abc. 在浏览器中得到 404!
  • 我确定这是某种形式的路由问题。您如何访问该网站?通过外部域,即 example.com 还是通过 localhost?
  • 它是一个外部域(即世界可见)。它不在本地主机上。我可以通过浏览器访问“主页”(www.example.com)——没问题。但是,正如我之前所说,即使我手动创建了所需的文件夹结构 (./well-known/acme-challenge),也要为 www-data 提供完全所有权并将文件放在该文件夹中 - 我无法通过它访问它我的浏览器,听上去是nginx配置的问题。
  • 您能否粘贴您的 Web 根文件夹的目录结构,包括显示权限/所有权?
【解决方案2】:

我遇到了同样的问题,这是由以下行引起的:

  location ~ /\. {
        deny all;
    }
   

我在上面提到的这一行之上添加了以下内容:

location ~ /\.well-known\/acme-challenge {
        allow all;
    }   

【讨论】:

    猜你喜欢
    • 2017-06-03
    • 2013-12-22
    • 1970-01-01
    • 2015-10-18
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 2017-07-15
    相关资源
    最近更新 更多