【问题标题】:Nginx permission issue (404)Nginx 权限问题 (404)
【发布时间】:2016-06-10 15:50:39
【问题描述】:

尝试使用 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$1 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 指令。
  • 天哪,谢谢!你能把它作为答案吗?

标签: nginx lets-encrypt


【解决方案1】:

正如 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;
}

【讨论】:

  • 根在哪里重要吗?我假设像 certbot 这样的脚本会解析配置以确定这条路径在哪里?
【解决方案2】:

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

请参阅this document 了解更多信息。

【讨论】:

  • 注意,如果你把 root 指令不应该包含 "/.well-known" 即使它在 location 块位置内 ~ /.well-known { allow all;根 /var/www/domain.com/public_html; # 不是 # 根 /var/www/domain.com/public_html/.well-known; }
猜你喜欢
  • 1970-01-01
  • 2021-04-22
  • 1970-01-01
  • 2020-06-21
  • 2020-06-26
  • 1970-01-01
  • 2017-08-22
  • 2019-06-18
  • 2016-09-14
相关资源
最近更新 更多