Настройка HTTPS (Certbot) и правильный редирект www → non-www в Nginx

Полный гайд по редиректам в Nginx: убираем www, настраиваем принудительный HTTPS и получаем бесплатные SSL-сертификаты через Certbot (Let's Encrypt). Рабочие примеры конфигов для продакшена.

Настройка HTTPS (Certbot) и правильный редирект www → non-www в Nginx

Чтобы сайт не открывался по двум адресам (www.example.com и example.com), нужно настроить 301-редирект. Это важно для SEO (исключает дубли страниц) и безопасности (принудительный HTTPS).

В этой статье:

  1. Как получить бесплатный SSL-сертификат (Certbot).
  2. Как настроить "идеальный" редирект без лишних перенаправлений.

Шаг 1. Установка SSL (Certbot)

Если у вас ещё нет HTTPS, начните с него. Самый простой способ — использовать Certbot (клиент для Let's Encrypt).

Установка (Ubuntu/Debian)

Лучший способ установки — через snap (официальная рекомендация):

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Либо через apt: sudo apt install certbot python3-certbot-nginx

Получение сертификата

Запустите команду для обоих доменов (с www и без):

sudo certbot --nginx -d example.com -d www.example.com

Certbot сам пропишет пути к сертификатам в вашем конфиге Nginx.


Шаг 2. Настройка редиректа в Nginx

Откройте конфиг вашего сайта (обычно в /etc/nginx/sites-available/default или example.com):

Вариант 1. "Идеальный" (Best Practice)

Этот метод избегает двойного редиректа. Запрос на http://www.example.com сразу летит на https://example.com, минуя промежуточные шаги.

Вам нужно три блока server:

  1. HTTP (порт 80) — ловит всё и шлёт на HTTPS:
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://example.com$request_uri;
}
  1. HTTPS с WWW (порт 443) — редиректит на "без www":
server {
    listen 443 ssl;
    server_name www.example.com;

    # Пути, которые добавил Certbot (проверьте свои!)
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    return 301 https://example.com$request_uri;
}
  1. HTTPS основной (порт 443) — ваш рабочий сайт:
server {
    listen 443 ssl;
    server_name example.com;

    # Те же сертификаты
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    root /var/www/html;
    index index.html index.php;

    location / {
        try_files $uri $uri/ =404;
    }
}

Шаг 3. Проверка и перезагрузка

Всегда проверяйте конфигурацию перед применением:

nginx -t

Если всё ок (syntax is ok), перезагрузите Nginx:

systemctl reload nginx

Теперь ваш сайт доступен только по https://example.com. Любые попытки зайти через HTTP или WWW будут автоматически перенаправлены.

Read more

Git: работа с ветками, конфликтами и Pull Request

Git: работа с ветками, конфликтами и Pull Request

Введение Git позволяет работать с ветками, безопасно вносить изменения и объединять их через Pull Request. В этой инструкции — базовые сценарии для повседневной работы. Работа с ветками Создание ветки git checkout -b feature/task-name Создаёт новую ветку и сразу переключает на неё. Переключение между ветками git checkout main git checkout feature/

By Evgeny Shmelev
Инструкция по работе с Git (базовая памятка)

Инструкция по работе с Git (базовая памятка)

Введение Git — система контроля версий для отслеживания изменений в файлах и совместной работы. Ниже — краткая практическая инструкция для повседневного использования. Основные команды Проверка состояния git status Показывает: * есть ли изменения * синхронизацию с сервером * новые файлы Получение изменений git pull Забирает изменения и объединяет их с текущей веткой. Обновление через rebase

By Evgeny Shmelev
Git показывает странные символы (\320\277...), файл удалён и появился заново — как исправить

Git показывает странные символы (\320\277...), файл удалён и появился заново — как исправить

Проблема При выполнении: git status можно увидеть: deleted: "\320\277\320\276..." untracked: "\320\277\320\276....txt" modified: .DS_Store При этом: * имя файла отображается непонятными символами * Git показывает удаление одного файла и появление другого * появляется файл .DS_Store Причина 1. Файл был переименован или

By Evgeny Shmelev