如何让 apache 处理 .well-known/acme-challenge 并且仍然将 / 传递给 wsgi

如何让 apache 处理 .well-known/acme-challenge 并且仍然将 / 传递给 wsgi

为了支持自动 LetsEncrypt 证书更新,certbot 使用--阿帕奇處理程序。

例如

certbot renew --apache

此处理程序安装一个临时 VirtualHost 用于*/.well-known/acme-挑战/在 Apache 服务器上验证续订。

问题是,如果现有的虚拟服务器使用 HTTPS 并且 Django 通过安装在 http 服务器根目录上的 WSGI 运行,则此机制不起作用。

临时 VirtualHost 无法捕获 URL,因此 Django 尝试为请求提供服务(并失败),因为该 URL 不在其 URL 列表中。

答案1

写这个问题让我思考它是如何工作的,所以我找到了答案。由于我找不到这个常见问题的答案,所以我想发布我找到的内容。

还有其他解决方案,例如certbot-djangodjango-letsencrypt但两者都比让股票 certbot 来处理要麻烦得多。

--阿帕奇certbot 处理程序将其文件放置在/var/lib/letsencrypt/http_challenges,因此所需要做的就是让 Apache 按照文档对静态文件推荐的方式处理这些文件。

<VirtualHost *:443>

    [....SSL stuff]

    AliasMatch /.well-known/acme-challenge/(.*)$ /var/lib/letsencrypt/http_challenges/$1
    <directory /var/lib/letsencrypt/http_challenges>
      AllowOverride None
      Require all granted
    </directory>

    [....WSGI stuff]
WSGIScriptAlias / /opt/myserver/myapp/wsgi.py

</VirtualHost>

相关内容