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

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

Чтобы сайт не открывался по двум адресам (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

Подключение к удалённому серверу по SSH из Windows (CMD, PowerShell, WSL, PuTTY)

Гайд по SSH-клиентам в Windows: используем встроенную команду `ssh` в PowerShell/CMD (Windows 10/11), полноценный Linux-терминал через WSL или классический PuTTY. Примеры команд для подключения, отправки скриптов и использования sudo без tty.

By Evgeny Shmelev

Включение/отключение Windows ПК через Home Assistant (Wake-on-LAN + RPC Shutdown)

Создаём единый переключатель в Home Assistant для управления Windows-компьютером. Включение через стандартный Wake-on-LAN, выключение через аддон RPC Shutdown. Инструкция по правке реестра Windows для удалённого выключения.

By Evgeny Shmelev