2016-02-27 115 views
4

试图让我们使用webroot方法加密安装程序,该方法创建并需要访问./.well-known/acme-challenge/目录中的文件。那里的一切(包括我加入了手动测试文件)显示为404Nginx权限问题(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; 
     } 
} 
+0

你的第一个'server'块没有'root'指令。 –

+0

呵呵,谢谢!你可以把它作为答案吗? – kilrizzy

回答

5

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

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

+1

注意,如果你把'root'指令不应该包含''/.well-known'',即使它位于'location'块中 位置〜/.well-known {允许所有; root /var/www/domain.com/public_html; #NOT #root /var/www/domain.com/public_html/.well-known; } – nighthawk454

7

正如Richard Smith所说,需要root指令。它可以进入server区块或location区块。

注意,即使root是在location块,路径不应包含"/.well-known"

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

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