Развернутое приложение Django возвращает 301 и NS_ERROR_REDIRECT_LOOP

Я только что установил свое приложение Django на моем VPS, используя gunicorn и nginx, и я не могу получить доступ к нему в браузере через пользовательский домен, которому я назначил его (ipantun.com), потому что он продолжает возвращать 301 и, наконец, остановился с NS_ERROR_REDIRECT_LOOP.

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

Я заметил, что если я перейду на URL ipantun.com, то он будет перенаправлен на www.ipantun.com, и он также будет запрашивать полный URL в качестве своего URI, как в конечном URL будет https://www.ipantun.com/www.ipantun.com.

Я ожидал перенаправления non-www на www, так как установил правило перенаправления на Cloudflare, чтобы сделать это, но запрос - это то, с чем я никогда не сталкивался раньше, поэтому я потерялся.

Все лог-файлы gunicorn и nginx не показали ничего плохого. Все, что указано в /etc/nginx/sites-available, есть и в /etc/nginx/sites-enabled.

Не уверен, что это имеет отношение к делу, но я также обслуживаю другое приложение React с того же сервера на том же порту, т.е. на порту 80. Но, как вы увидите в конфигурационных файлах nginx ниже, порт server_name отличается, и я не уверен, имеет ли это значение.

Вот мои settings.py, /etc/nginx/sites-available/default и /etc/nginx/sites-available/ipantun файлы.

settings.py

/etc/nginx/sites-available/default

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name pantunis.com www.pantunis.com;

    location / {
        root /var/www/html/build;

        index index.html index.htm index.nginx-debian.html;

        try_files $uri /index.html;
    }
}

/etc/nginx/sites-available/ipantun

server {
    listen 80;
    server_name ipantun.com www.ipantun.com;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/irfan/ipantun;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn.sock;
    }
}

Я также пробовал множество решений, предложенных на StackOverflow, например, проверить SECURE_SSL_REDIRECT, который по умолчанию является False: source, установка APPEND_SLASH=False и DEBUG=False в settings.py. Ничего не работает.

Если вы также видите что-то неточное или откровенно неправильное в моем settings.py или в том, чем я здесь делюсь, пожалуйста, не стесняйтесь комментировать или поправлять меня в своих ответах. Спасибо!

Хорошо, разобрался!

Оказалось, что проблема заключалась в том, что Cloudflare перенаправлял мой сайт, поскольку режим шифрования SSL/TLS для домена был установлен на Flexible, а не на Full (Strict). Как только я установил его на Full (Strict), я получил ошибку Invalid SSL certificate. Дальше все работает просто:

sudo certbot --nginx -d domain-name.com -d www.domain-name.com

для получения SSL-сертификатов для всех моих доменов.

Все эти ресурсы помогли мне:

  1. Почему Cloudflare продолжает перенаправлять?

  2. Как защитить Nginx с помощью Let's Encrypt на Ubuntu

  3. Хостинг нескольких доменов с одним сертификатом

Я подумывал отключить Cloudflare Proxy, но, судя по тому, что я прочитал, мне будет лучше, если они будут включены.

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