Домен, Nginx и HTTPS: проводим запрос до приложения
Сейчас приложение доступно внутри VPS по адресу вроде 127.0.0.1:8000. Сделаем красивый домен, безопасное соединение и одну контролируемую точку входа.
Карта запроса
Браузер спрашивает DNS, какой IP принадлежит домену. Затем подключается к Nginx на порту 443. Nginx расшифровывает HTTPS и передаёт запрос приложению на локальный порт. Такой посредник называется reverse proxy.
1. Направляем домен на VPS
В DNS‑редакторе регистратора создайте записи:
A @ IP_СЕРВЕРА
A www IP_СЕРВЕРА
@ означает основной домен. TTL можно оставить стандартным. Изменения распространяются не мгновенно — иногда несколько часов.
dig +short www.example.ru
Обе команды должны вернуть IP вашего VPS. Если dig не установлен, используйте nslookup example.ru.
2. Проверяем приложение
sudo ss -tulpn | grep 8000
Приложение должно отвечать локально. Идеально, если оно слушает 127.0.0.1, а не 0.0.0.0: тогда порт нельзя обойти снаружи.
3. Устанавливаем Nginx
sudo apt install -y nginx
sudo systemctl enable --now nginx
sudo ufw allow 'Nginx Full'
Nginx Full открывает 80 для HTTP и 443 для HTTPS. Проверьте sudo ufw status и откройте в браузере http://IP_СЕРВЕРА.
4. Создаём конфигурацию
listen 80;
listen [::]:80;
server_name example.ru www.example.ru;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Замените домен. Активируйте сайт и проверяйте конфигурацию перед каждым reload:
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx
curl -I http://example.ru
Ожидаем HTTP 200 или осмысленный ответ приложения. Ошибка 502 означает, что Nginx не может связаться с портом 8000: проверьте контейнер и адрес.
5. Выпускаем сертификат
sudo certbot --nginx -d example.ru -d www.example.ru
Certbot проверит домен, получит сертификат и дополнит Nginx. На вопрос о перенаправлении выбирайте HTTPS redirect.
sudo certbot certificates
sudo certbot renew --dry-run
Последняя команда имитирует продление. Сертификаты короткоживущие, поэтому автоматическое продление критично.
6. Разумные ограничения
Добавьте внутрь блока server, затем снова выполните nginx -t:
client_body_timeout 10s;
proxy_connect_timeout 10s;
proxy_read_timeout 60s;
server_tokens off;
Частые ошибки
- Certbot не подтверждает домен — DNS ещё ведёт не на этот VPS или закрыт порт 80.
- 502 Bad Gateway — приложение не запущено либо указан неверный порт.
- 403 Forbidden — проверьте права и выбранный location.
- Старый сайт всё ещё открывается — проверьте активные файлы в
sites-enabled.
sudo nginx -t. Проверка не изменяет работающий сервер и ловит опечатку заранее.Что дальше
Публичный сервис уже требует страховки данных: настроим резервные копии →