Развернутое приложение 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-сертификатов для всех моих доменов.
Все эти ресурсы помогли мне:
Я подумывал отключить Cloudflare Proxy, но, судя по тому, что я прочитал, мне будет лучше, если они будут включены.