1

我在 Debian 8 上使用 ngnix 运行 owncloud-server。我使用来自letsencrypt的域的ssl-certificate。

现在我想使用自动更新脚本,定期运行并更新我的证书。这适用于所有域,除了 owncloud。

实际上,在 nginx-owncloud-config 中有一个 location 块,可以防止letsencrypt进入子文件夹domain.org/.well-known/acme-challenge

location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
  deny all;
}

上帝啊,我不是正则表达式方面的专家,也不知道如何解决这个问题(以及这个表达式的实际含义)。

在该块下方,我包含了一个用于 Letecrypt 更新的位置块:

# Letsencrypt auto-renewal
location '/.well-known/acme-challenge' {
    default_type text/plain;
    root /var/www/;
    try_files $uri /$1;
}

我想我尝试过类似的东西:

location ~ ^/(?:\.(?!well-known/acme-challenge)|autotest|occ|issue|indie|db_|console) {
  deny all;
}

...不知道,如果这会影响表达。

我唯一的方法是注释掉“全部拒绝”。它有效。实际上我想,扩展更新脚本以停止服务器,更改owncloud-conf,再次重新启动服务器,获取新证书,再次停止服务器,将owncloud-conf更改回来并重新启动服务器......

但也许它更简单。我可能会学到更多关于正则表达式的东西......

有人给我小费吗?

4

1 回答 1

2

location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console)拒绝访问以/.诸如. 开头的任何 URI /.well-known

首先,您在根目录中是否有任何以句点开头的文件和目录(除了/.well-known)?


一种选择是使正则表达式更具体,例如:

location ~ ^/(?:\.ht|autotest|occ|issue|indie|db_|console)

将拒绝访问以 . 开头的任何 URI /.ht


另一种选择是通过添加修饰符来获得location '/.well-known/acme-challenge'优先权。^~请参阅此文档

location ^~ /.well-known/acme-challenge

这将使该位置优先于所有正则表达式位置。因此,如果该位置包含.php文件,它们可能会停止工作。


最后一个选择是将其转换为正则表达式位置:

location ~ ^/\.well-known/acme-challenge

在这种情况下,它将具有相同的优先级,您可以将其排序在拒绝位置之上。

于 2016-02-09T11:44:28.623 回答