Принудительный редирект с HTTP на HTTPS в Nginx
Хочу себе такие же кнопкиПринудительный редирект с HTTP на HTTPS в Nginx: Защищаем трафик и SEO
Вы когда-нибудь заходили на сайт и видели в адресной строке браузера зеленый замочек? Это значит, что соединение защищено протоколом HTTPS — данные между вами и сервером шифруются, и их нельзя перехватить. Но что, если пользователь случайно введет адрес с HTTP (без шифрования)? Ваш сайт должен автоматически перенаправить его на безопасную версию.
Почему это критично?
- Безопасность: Злоумышленники могут перехватить данные (пароли, платежи) на HTTP.
- SEO: Google понижает в выдаче сайты без HTTPS.
- Доверие: Пользователи видят предупреждение "Не защищено" и уходят.
В этом уроке вы научитесь настраивать принудительный редирект с HTTP на HTTPS в Nginx — самом популярном веб-сервере для высоконагруженных проектов. Мы разберем 3 метода (от простого к продвинутому), нюансы с поддоменами и WWW, а также избежим типичных ошибок.
1. Подготовка: Что нужно знать перед настройкой
Прежде чем приступать, убедитесь, что:
✅ У вас установлен Nginx (версия 1.4+).
✅ На сервере настроен SSL-сертификат (например, от Let’s Encrypt).
✅ Вы имеете доступ к конфигурационным файлам Nginx (обычно /etc/nginx/).
Важно! Если SSL-сертификата нет, сначала получите его. Для тестов можно использовать самоподписанный сертификат, но в продакшене — только доверенные (Let’s Encrypt, Cloudflare, Sectigo).
2. Метод 1: Простой редирект для одного домена
Самый базовый способ — перенаправить все запросы с HTTP на HTTPS для одного домена (например, example.com).
Шаг 1. Открываем конфиг Nginx
Конфигурационные файлы Nginx обычно лежат в /etc/nginx/sites-available/. Найдите файл вашего сайта (например, example.com.conf) и откройте его в редакторе:
sudo nano /etc/nginx/sites-available/example.com.conf
Шаг 2. Настраиваем редирект
Добавьте новый серверный блок для обработки HTTP-запросов (порт 80) и перенаправления их на HTTPS (порт 443):
server {
listen 80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
Разбор кода:
listen 80— слушаем HTTP-порт.server_name— указываем домены, для которых действует правило.return 301— постоянный редирект (301) на HTTPS-версию.$request_uri— сохраняем оригинальный путь (например,/blog/post→https://example.com/blog/post).
Шаг 3. Проверяем и перезагружаем Nginx
Перед применением проверьте конфиг на ошибки:
sudo nginx -t
Если тест прошел успешно, перезагрузите Nginx:
sudo systemctl reload nginx
Шаг 4. Тестируем
Откройте браузер и введите:
http://example.com
Вы должны автоматически перейти на:
https://example.com
Почему 301, а не 302?
- 301 (Moved Permanently) — постоянный редирект. Поисковые роботы обновят индекс на HTTPS.
- 302 (Found) — временный. Не рекомендуется для SEO.
3. Метод 2: Редирект с WWW на не-WWW (или наоборот)
Часто нужно не только перевести на HTTPS, но и нормализовать домен (например, перенаправить www.example.com → example.com). Это важно для SEO, чтобы избежать дублирования контента.
Вариант А: С WWW на не-WWW + HTTPS
server {
listen 80;
server_name www.example.com example.com;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /путь/к/сертификату.crt;
ssl_certificate_key /путь/к/ключу.key;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /путь/к/сертификату.crt;
ssl_certificate_key /путь/к/ключу.key;
# Здесь ваша основная конфигурация для HTTPS
root /var/www/example.com;
index index.html;
# ...
}
Логика:
- Все HTTP-запросы (порт 80) → редирект на HTTPS + не-WWW.
- HTTPS-запросы на
www.example.com→ редирект наexample.com. - Основной блок обрабатывает только
https://example.com.
Вариант Б: С не-WWW на WWW + HTTPS
Если вам нужна версия с www, поменяйте местами домены в return 301.
4. Метод 3: Универсальный редирект для всех доменов (массовая настройка)
Если у вас много сайтов на одном сервере, можно автоматизировать редирект для всех доменов, не прописывая каждый вручную.
Шаг 1. Создаем отдельный конфиг для редиректов
Создайте файл /etc/nginx/conf.d/redirect-http-to-https.conf:
sudo nano /etc/nginx/conf.d/redirect-http-to-https.conf
Добавьте туда:
server {
listen 80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
Пояснения:
default_server— этот блок будет обрабатывать все запросы на порт 80, для которых нет отдельногоserver_name.server_name _— подстановочный символ для любых доменов.$host— автоматически подставляет оригинальный домен (например,example.comилиsub.example.com).
Шаг 2. Проверяем и применяем
sudo nginx -t && sudo systemctl reload nginx
Предупреждение! Этот метод не подходит, если у вас есть сайты, которые должны работать только по HTTP (например, внутренние сервисы). Для них нужно создать отдельные конфиги с
listen 80доdefault_server.
5. Типичные ошибки и как их избежать
| Ошибка | Причина | Решение |
|---|---|---|
| Редирект зацикливается | В HTTPS-блоке тоже прописан редирект на HTTPS | Убедитесь, что в блоке с listen 443 нет return 301 |
| Сайт не открывается после редиректа | Неверный путь к SSL-сертификату | Проверьте пути в ssl_certificate и ssl_certificate_key |
Редирект работает, но теряется путь (например, /blog → /) |
Не указан $request_uri |
Добавьте $request_uri в return 301 |
| Nginx не перезагружается | Синтаксическая ошибка в конфиге | Запустите sudo nginx -t для диагностики |
| Редирект не работает для поддоменов | В server_name не указаны поддомены |
Добавьте *.example.com или перечислите явно |
6. Продвинутые нюансы
А. Редирект с сохранением языка (для многоязычных сайтов)
Если у вас URL вида example.com/en/page, используйте:
return 301 https://example.com$request_uri;
Это сохранит /en/page после редиректа.
Б. Редирект с исключениями
Допустим, вам нужно не перенаправлять некоторые пути (например, /healthcheck для мониторинга):
server {
listen 80;
server_name example.com;
location /healthcheck {
return 200 "OK";
}
location / {
return 301 https://example.com$request_uri;
}
}
В. Редирект с HSTS (дополнительная защита)
HSTS (HTTP Strict Transport Security) — это заголовок, который принудительно заставляет браузер всегда использовать HTTPS в течение заданного времени.
Добавьте в HTTPS-блок:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Что это дает?
- Браузер запомнит, что сайт должен открываться только по HTTPS.
- Даже если пользователь введет
http://, браузер автоматически подставитhttps://. preloadпозволяет добавить домен в список предзагрузки HSTS (используется Google Chrome и другими браузерами).
Внимание! Включайте HSTS только после тестирования HTTPS! Если сертификат истечет или будет ошибка, пользователи не смогут зайти на сайт.
7. Проверка результата
После настройки проверьте:
- Ручной тест:
- Откройте
http://example.com→ должен перейти наhttps://example.com. - Проверьте с
wwwи без.
- Откройте
- Инструменты для вебмастеров:
- Команда
curl:curl -I http://example.comДолжен вернуть статус 301 и заголовок
Location: https://example.com.
Практика для закрепления
Упражнение 1. Базовый редирект
Настройте редирект с HTTP на HTTPS для домена test-site.ru. Конфигурационный файл лежит в /etc/nginx/sites-available/test-site.ru.conf.
Шаги:
- Откройте файл.
- Добавьте серверный блок для порта 80 с редиректом на HTTPS.
- Проверьте конфиг и перезагрузите Nginx.
- Протестируйте в браузере.
Упражнение 2. Редирект с WWW
Модифицируйте конфиг из Упражнения 1, чтобы:
- Все запросы на
www.test-site.ruперенаправлялись наhttps://test-site.ru. - Основной сайт работал только на
https://test-site.ru(безwww).
Упражнение 3. Массовый редирект
На сервере хостятся 5 сайтов:
site1.comsite2.comblog.site1.comshop.site2.comold-project.com(должен остаться на HTTP)
Настройте один конфиг, который будет перенаправлять все сайты на HTTPS, кроме old-project.com.
Упражнение 4. Диагностика ошибок
Пользователь жалуется, что после настройки редиректа сайт example.org не открывается. При вводе http://example.org браузер показывает ошибку ERR_TOO_MANY_REDIRECTS.
Вопросы:
- В чем возможная причина?
- Как это исправить?
Упражнение 5. HSTS
Добавьте заголовок HSTS для домена secure-site.com с параметрами:
max-age=63072000(2 года)- Включите поддомены (
includeSubDomains) - Разрешите предзагрузку (
preload)
Итоги
Вы научились: ✅ Настраивать принудительный редирект с HTTP на HTTPS в Nginx. ✅ Работать с WWW и не-WWW версиями домена. ✅ Автоматизировать редиректы для многих сайтов. ✅ Избегать типичных ошибок и тестировать результат. ✅ Усиливать безопасность с HSTS.
Следующий шаг:
- Настройте автоматическое обновление SSL-сертификатов (например, через
certbotдля Let’s Encrypt). - Изучите оптимизацию Nginx для высоких нагрузок (keepalive, gzip, caching).
Если остались вопросы — задавайте в комментариях! 🚀
Введение: чем VDS отличается от шаред-хостинга и зачем это веб-мастеру
Как правильно выбрать тариф: CPU, RAM, NVMe или SSD, канал
Выбор операционной системы: почему Ubuntu 22.04/24.04 — стандарт индустрии
Регистрация домена и первичная настройка DNS-записей (A, AAAA, CNAME)
Генерация SSH-ключей на локальном компьютере (Windows/Mac/Linux)
Добавление публичного ключа на сервер и первый вход по SSH
Отключение входа по паролю и запрет авторизации для root
Смена стандартного порта SSH для снижения шума в логах
Создание основного рабочего пользователя с правами sudo
Базовое обновление системы и установка необходимых утилит (curl, wget, git, htop)
Настройка часового пояса и синхронизация времени (NTP)
Установка и базовая настройка фаервола UFW
Разрешение только необходимых портов (SSH, HTTP, HTTPS)
Установка Fail2Ban для защиты от перебора паролей
Настройка правил Fail2Ban для SSH и веб-сервера
Знакомство с Docker: установка движка и CLI
Установка Docker Compose для управления мульти-контейнерными приложениями
Основы изоляции: почему каждый проект должен быть в своем контейнере
Подготовка файловой структуры сервера для удобного хранения проектов
Развертывание Nginx как обратного прокси-сервера через Docker
Настройка конфигурации Nginx для статических сайтов
Установка PHP-FPM в отдельном контейнере
Связка Nginx и PHP-FPM через внутреннюю Docker-сеть
Оптимизация настроек PHP-FPM (pm.max_children, memory_limit) под нагрузку
Установка MariaDB/MySQL в изолированном контейнере
Безопасное хранение паролей от БД через переменные окружения (.env)
Подключение к базе данных из внешнего клиента (DBeaver/Navicat) через туннель
Установка Redis для кэширования запросов и сессий
Интеграция Redis с PHP-приложением для ускорения работы
Автоматическая выдача SSL-сертификатов через Certbot (Let's Encrypt)
Настройка автопродления SSL-сертификатов по крону
Принудительный редирект с HTTP на HTTPS в Nginx
Включение gzip и brotli сжатия для ускорения загрузки страниц
Настройка кэширования статики (browser caching) в заголовках Nginx
Защита от простых DDoS и ботов: модуль limit_req в Nginx
Настройка резервного копирования баз данных (mysqldump) по расписанию
Настройка резервного копирования файлов проектов (tar)
Отправка бэкапов на удаленное хранилище (S3-compatible storage или другой сервер)
Ротация и очистка старых логов, чтобы не забить диск
Мониторинг нагрузки: установка и настройка htop и iotop
Просмотр логов в реальном времени: tail, grep и journalctl
Установка простого мониторинга доступности (Uptime Kuma или скрипт в Telegram)
Изоляция арбитражных инструментов: запуск ботов в отдельных контейнерах
Установка SOCKS5/HTTP прокси (3proxy) внутри Docker для мультиаккаунтинга
Настройка аутентификации и ограничения доступа к прокси по IP
Проверка анонимности и работы прокси-сервера
Оптимизация ядра Linux (sysctl.conf) для высоких нагрузок и сетевых соединений
Настройка swap-файла: когда он нужен, а когда вредит
Чек-лист финальной проверки безопасности перед запуском проекта
План действий при взломе или падении сервера: восстановление из бэкапа
АПТЕЧКА ДЛЯ ЖИВОТНЫХ
Автомобили Германии — FORD, MERSEDES, VW, IVECO
Чат рулетка 2026: чаты, где каждый момент — шанс
Чат рулетка онлайн
Чат с Аней: психологический разговор
Чатрулетка: новый способ общения
Чай и кофе: сила вкуса
Детские игрушки из безопасных материалов
Эксплуатация шин: Рекомендации по использованию
Фототехника для пейзажей
Как Aptum хостинг помогает малым бизнесам в управлении CRM-системами
Как выбрать Vdsina вечный хостинг для своего проекта
Компоненты безопасности IP
Конкуренция на российском автомобильном рынке
Онлайн генератор паролей для Windows
Оптимизация обработки форм GEO проекта
Сервер для социальных сетей: Безопасность, Скорость, Изоляция
Смешные моменты
Сравнение Arsys хостинг сервисов для блогеров с WordPress на 2023 год
Весь экран под циферблат