2016-02-09 37 views
1

我在Debian 8上运行一个拥有ngnix的owncloud-server。 我使用来自letsencrypt的该域的ssl证书。Letsencrypt更新+ Nginx + owncloud config =由于正则表达式而失败

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

实际上存在nginx的-owncloud-配置一个位置块,其防止从letsencrypt进入该子文件夹domain.org/.well-known/acme-challenge

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

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

下面是块i包括为letsecrypt更新位置块:

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

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

对我来说,唯一的办法就是评论“拒绝所有人”。它的工作原理。其实我想到的是,扩展更新脚本来停止服务器,更改自己的云端conf,重新启动服务器,获取新证书,再次停止服务器,更改自己的云端服务器并重新启动服务器...

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

有没有人对我有帮助?

回答

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'占先。见this document

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

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


最后一个办法是把它变成一个正则表达式的位置:

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

在这种情况下,将具有相同的优先级,你可以命令它否认位置上方。

+0

“location ^〜/.well-known/acme-challenge”解决了它。另外我没有尝试其他解决方案。非常感谢您的帮助。该文档帮助我更好地理解正则表达式,以及nginx如何优先考虑位置块。 – Nagarjuna