Назад | Перейти на главную страницу

Как сделать так, чтобы apache обрабатывал .well-known / acme-challenge и все еще имел / передавал wsgi

Для поддержки автоматического продления сертификата LetsEncrypt certbot использует --апаче обработчик.

например

certbot renew --apache

Этот обработчик устанавливает временный VirtualHost для * /. хорошо известный / acme-challenge / на сервере Apache, чтобы подтвердить обновление.

Проблема в том, что этот механизм не работает, если существующий виртуальный сервер использует HTTPS и Django через WSGI, установленный в корне http-сервера.

Временному VirtualHost не удается захватить URL-адрес, поэтому Django пытается обслужить запрос (и терпит неудачу), поскольку URL-адрес отсутствует в списке URL-адресов.

Написание вопроса заставило меня задуматься о том, как это работает, поэтому я разработал ответ. Поскольку я не мог найти ответа на то, что должно быть распространенной проблемой, я решил опубликовать то, что нашел.

Есть и другие решения, например. certbot-django и django-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>