Привязка домена к серверу Django, настройка SSL и редиректов

Внимание! Это 5-я часть из серии статей по деплою (развертыванию) Django-приложения. Перед ее прочтением рекомендуем ознакомиться с другими частями:
1. Начальная настройка сервера
2. Деплой Django-приложения
3. Подключение базы данных PostgreSQL
4. Установка и привязка Memcached к Django
5. Привязка домена к серверу Django, настройка SSL и редиректов (текущая статья)

Приветствую! В этой статье мы разберем процесс привязки доменного имени к Django-приложению, выпустим и настроим SSL-сертификат для этого домена, а также настроим все необходимые редиректы с помощью веб-сервера Nginx. Это заключительная часть по деплою Django-приложения, по результатам которой мы получим готовый Django-проект для продакшна. Итак, поехали.

1. Приобретение домена

Для начала нужно приобрести доменное имя (если вы этого еще не сделали). Самый простой вариант - это приобрести домен на сайте того хостинг-провайдера, где вы арендуете хостинг или сервер. Цены везде примерно одинаковые. На нашем сайте также есть статья со сравнением самых дешевых регистраторов доменных имен.

2. Привязка домена к серверу (к IP-адресу)

После приобретения домена в первую очередь нужно немного подождать его активации (от 1 до 12 часов, в зависимости от регистратора и доменной зоны). Это закономерно для всех новых, только что зарегистрированных доменных имен. Далее этот домен нужно привязать к нашему серверу, настроив DNS. На разных хостингах эта процедура выполняется по-разному. Я покажу на примере хостинга Zomro в панели управления ISPmanager.

В панели управления в левом меню выбираем пункт DNS-хостинг. В открывшемся окне жмем на кнопку "Заказать". После этого у вас появится DNS-хостинг на 50 доменов.

DNS сервер на хостинге Zomro

Если ваш хостинг или сервер находится на этом же аккаунте, то DNS-хостинг обойдется вам бесплатно. В противном случае за него нужно будет оплачивать 2.5$ ежемесячно.

Далее жмем на кнопку перейти и попадаем в DNS Manager:

Перейти в DNS Manager

В открывшемся окне жмем "Новый домен", выбираем тип Master, вводим наш домен, IP-адрес нашего сервера и адрес электронной почты:

Привязка домена к серверу

Возвращаемся в панель управления хостинга, переходим в раздел "Домены", выбираем наш домен и жмем на кнопку NS:
Настройка NS домена

В случае с хостингом Zomro прописываем следующие NS сервера:

<code>ns1.zomro.net
ns2.zomro.ru
ns3.zomro.com
ns4.zomro.su

NS сервера Zomro

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

Привязка домена к Django

Если у вас возникли какие-либо проблемы с этим пунктом, то обратитесь в техподдержку своего хостинг-провайдера.

3. Настройка SSL-сертификата

Настроим бесплатный SSL-сертификат Let's Encrypt для нашего сайта. Установим Let's Encrypt:

<code>sudo apt install letsencrypt

4. Создадим папку для хранения сертификатов

<code>sudo mkdir /var/www/example

5. Настроим Nginx:

Откроем конфиг:

<code>sudo nano /etc/nginx/sites-available/default

Добавим следующую запись:

<code>location /.well-known {
    alias /var/www/example/.well-known;
}

Конфиг Nginx

Сохраним и перезапустим Nginx:

<code>sudo service nginx restart

6. Создадим SSL-сертификат для нашего домена в созданной папке

<code>sudo letsencrypt certonly --webroot -w /var/www/example -d rating-casino.info -d www.rating-casino.info

7. Откроем 443 порт:

<code>sudo ufw allow 443/tcp

8. Подключим SSL и настроим редиректы (c "http" на "https" и c "www" на "без www")

Еще раз откроем конфиг Nginx:

<code>sudo nano /etc/nginx/sites-available/default

И добавим туда нужный код. В конечном итоге мой Nginx-конфиг выглядит следующим образом:

<code>server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name rating-casino.info www.rating-casino.info;
        return 301 https://rating-casino.info$request_uri;
}
server {
        listen 443 ssl;
        listen [::]:443 ssl;
        ssl_certificate /etc/letsencrypt/live/rating-casino.info/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/rating-casino.info/privkey.pem;
        server_name www.rating-casino.info;
        return 301 https://rating-casino.info$request_uri;
}
server {
        listen 443 ssl;
        listen [::]:443 ssl;
        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;
        server_name rating-casino.info;
        ssl_certificate /etc/letsencrypt/live/rating-casino.info/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/rating-casino.info/privkey.pem;
        location / {
                proxy_pass http://127.0.0.1:8001;
                proxy_set_header X-Forwarded-Host $server_name;
                proxy_set_header X-Real-IP $remote_addr;
                add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
                add_header Access-Control-Allow-Origin *;
        }
        location /.well-known {
                alias /var/www/example/.well-known;
        }
        location /static/ {
                alias /home/hostgeek/myapps/parser/env/lib/python3.8/site-packages/django/contrib/admin/static/;
                expires modified +1w;
        }
}

Сохраняем файл и перезапускаем Nginx:

<code>sudo service nginx restart

Теперь наш сайт доступен по защищенному SSL-соединению. При попытке открыть сайт по http или по www будет выполнен редирект на https://rating-casino.info:

Сайт Django по SSL соединению

Эти редиректы нужны для SEO-оптимизации сайта. Если их не настроить, то поисковые системы будут видеть 4 разных сайта и делить весь SEO-вес между ними:

<code><a href="http://rating-casino.info">http://rating-casino.info</a> <a href="http://www.rating-casino.info">http://www.rating-casino.info</a> <a href="https://rating-casino.info">https://rating-casino.info</a> <a href="https://www.rating-casino.info">https://www.rating-casino.info</a> 

В процессе разработке вам наверняка придется настраивать и другие редиректы. Делается это опционально все в том же конфиге Nginx. Основные редиректы были представлены выше.

На этом все! За эти 5 статей мы выполнили полный деплой приложения Django. Также для удобства работы с файлами на сервере можно установить и настроить FTP-сервер - VSFTPD, но это мы сделаем уже в следующей статье.

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

Оставьте свой отзыв
Для публикации отзыва, пожалуйста, авторизуйтесь на сайте с помощью одной из доступных социальных сетей. Это действие займет несколько секунд Вашего времени и требуется для защиты сайта от накруток рейтингов и отзывов