Развернутое приложение 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, но, судя по тому, что я прочитал, мне будет лучше, если они будут включены.