我在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并重新启动服务器...
但也许它更简单。我可以学习更多关于正则表达式的内容......
有没有人给我一个提示?
答案 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
在这种情况下,它具有相同的优先权,您可以在拒绝位置上方订购。