由于正则表达式,Letsencrypt Renewal + Nginx + owncloud config =失败

时间:2016-02-09 11:01:16

标签: regex nginx owncloud lets-encrypt nginx-location

我在Debian 8上运行带有ngnix的owncloud-server。 我从letsencrypt为该域使用ssl-certificate。

现在我想使用autorenewal-script,定期运行并续订我的证书。除了owncloud之外,这适用于所有域。

实际上nginx-owncloud-config中有一个位置块阻止letsencrypt进入子文件夹 domain.org/.well-known/acme-challenge

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

上帝,我不是正则表达式的专家,也不知道如何解决这个问题(以及这个表达实际上意味着什么)。

在该块下方,我包含了letsecrypt-renewal的位置块:

# 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;
}

......不知道,这是否会影响表达。

对我来说,唯一的方法是评论出“拒绝所有人”#34;。它有效。实际上我想到的是,扩展续订脚本以停止服务器,更改owncloud-conf,再次重新启动服务器,获取新证书,再次停止服务器,更改owncloud-conf并重新启动服务器...

但也许它更简单。我可以学习更多关于正则表达式的内容......

有没有人给我一个提示?

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

另一种选择是通过添加location '/.well-known/acme-challenge'修饰符来优先^~。请参阅this document

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

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

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

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

在这种情况下,它具有相同的优先权,您可以在拒绝位置上方订购。