letsencrypt certbot-auto的“webroot-path”应该用于非PHP /非静态文件网站?

时间:2018-04-22 09:09:11

标签: node.js apache flask lets-encrypt certbot

如果您的网站仅使用Apache(可能使用PHP),请访问:

 if($('[parent='+val+']').length > 0){
        $('[parent='+val+']').each(function(){
        }
}

然后,很容易设置/home/www/mywebsite/ /home/www/mywebsite/index.php /home/www/mywebsite/style.css 的{​​{1}}:

certbot

问题:使用NodeJS运营的网站时  或Python Flask或Bottle,使用WSGI(mod_wsgi)或简单代理链接到Apache(我知道在Python的情况下不建议使用后者)

--webroot-path

./certbot-auto certonly --webroot --webroot-path /home/www/mywebsite/ --domain example.com --domain www.example.com --email a@example.com 应该是什么?

更具体地说,如果我们有:

RewriteEngine On
RewriteRule /(.*)           http://localhost:5000/$1 [P,L]

--webroot-path

那么选择/home/www/mywebsite/ (Pyton example) /home/www/mywebsite/myapp.py /home/www/mywebsite/myapp.sqlite /home/www/mywebsite/static/style.css ... 作为/home/www/mywebsite/ (NodeJS example) /home/www/mywebsite/myapp.js /home/www/mywebsite/myapp.sqlite /home/www/mywebsite/static/style.css ... 是没有意义的,对吗?

事实上,我不希望像letsencrypt certbot这样的其他程序/脚本摆弄我的.py文件。

无论如何,--webroot-path中的/home/www/mywebsite/做了什么?那里的文件会被分析,解析吗?

2 个答案:

答案 0 :(得分:1)

非常有趣的问题,但却有一个微不足道的答案。官方文件说明:

  

webroot插件的工作原理是为每个人创建一个临时文件   请求${webroot-path}/.well-known/acme-challenge中的域名。然后   Let的加密验证服务器使HTTP请求验证   每个请求的域的DNS解析为正在运行的服务器   certbot。

因此,对于您的实际 webroot确实驻留的Certbot并不重要,只要它在您尝试获取证书的域名下服务,并且&和#39;对你的项目/框架结构并不感兴趣。

换句话说,certbot 不需要访问包含源文件的项目目录。

例如,服务器上任何应用程序的Apache配置都可以共享所谓的webroot,而Certbot只需要/.well-known/acme-challenge/作为静态目录,它可以在服务器端存储挑战文件,该文件可用于Certbot验证服务器:

Alias /.well-known/acme-challenge/ "/var/www/html/.well-known/acme-challenge/"

<Directory "/var/www/html/">
    AllowOverride None
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>

在设置特定服务器块配置时,它适用于NGINX:

server {

    location /.well-known/acme-challenge/ {
        alias /var/www/html/.well-known/acme-challenge/;
    }

}

如果随后请求证书,则两个示例都有效:

certbot-auto certonly --webroot --webroot-path /var/www/html -d domain.com

答案 1 :(得分:1)

这是DamagedOrganic答案的补充信息(完全归功于他)。

对于certbot / Letsencrypt 验证证书,它必须能够访问质询/响应网址,例如http://example.com/.well-known/acme-challenge/B39sdfoyoesdf21-qksl2638761867648514。 出于这个原因,它将创建一个临时文件(在最后删除,这就是为什么在成功的certbot之后不再找到它),例如在{{1}给出的路径中.well-known/acme-challenge/B39sdfoyoesdf21-qksl2638761867648514 }}。 (然后Letsencrypt的服务器将访问前面提到的URL,以验证一切正常。)。

解决方案:选择--webroot-path作为提供静态文件的目录。示例:如果您有此结构:

--webroot-path

然后使用

/home/www/mywebsite/
/home/www/mywebsite/myapp.py
/home/www/mywebsite/myapp.sqlite
/home/www/mywebsite/static/style.css        # /static/ serves static files... 
/home/www/mywebsite/static/favicon.ico
...

PS:这是一个带瓶子的解决方案(我认为它与Flask类似):

./certbot-auto certonly --webroot --webroot-path /home/www/mywebsite/static/
                        --domain example.com --domain www.example.com --email a@example.com