Ошибка 403 при обновлении Let's Encrypt Certbot с помощью Django и Apache. У меня есть 6 дней для продления

При выполнении команды certbot renew я сначала изменяю разрешения брандмауэра, чтобы разрешить соединения на порту 80, перевожу Cloudflare в режим разработки, а затем выполняю команду обновления. Однако на этот раз я получил ошибку 403 Forbidden, пытаясь получить доступ к url example.com/.well-known/acme-challenge/funnylettersandstuff. Я не помню, чтобы certbot нуждался в этом url, но я делаю это только раз в год для одного из моих сайтов, потому что по какой-то причине я так и не смог заставить эту конфигурацию автоматически обновляться. И вот теперь я пытаюсь выяснить, что вызывает эту ошибку. Я просмотрел файл конфигурации виртуального хоста и не вижу никаких причин, по которым это может произойти. У меня также включен modsecurity, но я сомневаюсь, что дело в этом, поскольку я не могу найти никаких связанных ошибок в журналах modsecurity. Нужно ли мне что-то сделать в Django, чтобы это заработало?

Certbot failed to authenticate some domains (authenticator: apache). The Certificate Authority reported these problems:
  Domain: example.com
  Type:   unauthorized
  Detail: During secondary validation: 2a06:98c1:3120::1: Invalid response from http:// example.com/.well-known/acme-challenge/funkylettersandnumbers: 403
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -F
sudo iptables -X
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 969 -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -j DROP
sudo iptables -A FORWARD -j DROP
sudo ip6tables -P INPUT ACCEPT
sudo ip6tables -P FORWARD ACCEPT
sudo ip6tables -P OUTPUT ACCEPT
sudo ip6tables -t nat -F
sudo ip6tables -t mangle -F
sudo ip6tables -F
sudo ip6tables -X
sudo ip6tables -A INPUT -i lo -j ACCEPT
sudo ip6tables -A OUTPUT -o lo -j ACCEPT
sudo ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo ip6tables -A INPUT -p tcp --dport 969 -j ACCEPT
sudo ip6tables -A INPUT -j DROP
sudo ip6tables -A FORWARD -j DROP
<VirtualHost *:8080>
        <Directory /home/username/example>
                Deny from all
        </Directory>
</VirtualHost>
<VirtualHost *:80>
        ServerName example.com
        ServerAlias www.example.com
        ServerAdmin webmaster@example.com
        Alias /static /home/username/example/example/static
        Alias /media /home/username/example/example/example/static/example/img

#RewriteEngine on
#RewriteCond %{SERVER_NAME} =example.com [OR]
#RewriteCond %{SERVER_NAME} =www.example.com
#RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName example.com
        ServerAlias www.example.com
        Alias /static /home/username/example/example/static
        Alias /media /home/username/example/example/example/static/example/img


        <Directory /home/username/example/example/static>
            Require all granted
            AllowOverride All
            Options -Indexes -MultiViews +SymLinksIfOwnerMatch
        </Directory>
        <Directory /home/username/example/example/example/static/example/img>
            Require all granted
            AllowOverride All
            Options -Indexes -MultiViews +SymLinksIfOwnerMatch
        </Directory>
        <Directory /home/username/example/example>
            <Files wsgi.py>
                Require all granted
            </Files>
        </Directory>

    WSGIDaemonProcess example.com python-home=/home/username/example/example-env python-path=/home/username/example/example
    WSGIProcessGroup example.com
    WSGIScriptAlias / /home/username/example/example/example/wsgi.py

SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

Я работал с ChatGPT над этим, но он просто водит меня по кругу. Я пробовал предоставлять разрешение на этот url всеми возможными способами, но я действительно запутался в этом. ChatGPT сказал, что мне не нужно, чтобы Django управлял этим url, так как Certbot будет решать эту проблему с помощью Apache. Но мне это кажется неправильным. Кажется, я должен как-то создать этот .well-known/acme-challenge/ в Django, но я не знаю, как Certbot будет взаимодействовать с ним, чтобы предоставить вызов.

Вернуться на верх