NGINX
#nginx#ssl#https#redirect#www#server

Nginx: редирект HTTP→HTTPS и WWW→non-WWW

Конфигурация Nginx для автоматического редиректа с HTTP на HTTPS и с www на non-www (или наоборот) в одном server block.

Как использовать

  1. Скопируйте нужный фрагмент кода.
  2. Вставьте в свой проект и при необходимости измените под задачу.
  3. Проверьте зависимости и окружение (версии, переменные).

Конфигурация Nginx для автоматического редиректа с HTTP на HTTPS и нормализации домена (www → non-www или наоборот).

# Редирект HTTP → HTTPS и www → non-www
server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;

    # Редирект www → non-www
    if ($host = www.example.com) {
        return 301 https://example.com$request_uri;
    }

    # Редирект HTTP → HTTPS
    return 301 https://example.com$request_uri;
}

# Основной server block для HTTPS
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    # ... остальная конфигурация
}

Вариант: non-www → www

Если нужно наоборот (non-www → www), измените редирект:

if ($host = example.com) {
    return 301 https://www.example.com$request_uri;
}

Добавление HSTS (строго по HTTPS):

# В HTTPS server block добавьте:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

Usage:

Добавьте конфигурацию в server block и перезагрузите nginx. Для Let’s Encrypt используйте отдельный server block на порту 80 для ACME challenge.

Notes:

⚠️ HSTS заставляет браузер использовать только HTTPS на 1 год. Включайте только после полной настройки SSL. preload требует регистрации в списке HSTS preload. Используйте return 301 вместо rewrite для постоянного редиректа (лучше для SEO).