Nginx 权限问题 (404)

Nginx permission issue (404)

尝试使用 webroot 方法让我们加密设置,该方法创建并需要访问 ./.well-known/acme-challenge/ 目录中的文件。那里的所有内容(包括我添加的手动测试文件)都显示为 404。

有点疯狂,因为我尝试了以下变体:

location ~ /.well-known {
    allow all;
}
location /.well-known/acme-challenge {
    default_type text/plain;
}
location /.well-known {
    try_files $uri $uri/ =404;
}

运气不好。我还检查了文件夹的权限,甚至设置为 777。我对设置 nginx 配置还很陌生,所以我确定有一个现有条件会导致它失败:

server{
    listen 80;
    server_name domain.com www.domain.com;
    location / {
        rewrite ^(.*)$ https://domain.com permanent;
    }
    location ~ /.well-known {
            allow all;
    }
}

server {
        listen 0.0.0.0:443 ssl;
        root /var/www/domain.com/public_html;
        index index.php index.html index.htm;
        server_name domain.com www.domain.com;
        ssl on;
        ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
        location / {
                try_files $uri $uri/ /index.php?$args;
        }
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
                client_max_body_size 32m;
        }
        location ~ /.well-known {
            allow all;
        }
}

您的第一个 server 块需要一个 root 指令来解析本地文件。

有关更多信息,请参阅 this document

正如 Richard Smith 所说,需要一个 root 指令。它可以放在 server 块或 location 块中。

注意,即使rootlocation块中,路径也不应包含"/.well-known"

location ~ /.well-known {
    allow all;
    root /var/www/domain.com/public_html;

    # NOT
    # root /var/www/domain.com/public_html/.well-known;
}