Nginx: редирект HTTP→HTTPS и WWW→non-WWW
Конфигурация Nginx для автоматического редиректа с HTTP на HTTPS и с www на non-www (или наоборот) в одном server block.
Как использовать
- Скопируйте нужный фрагмент кода.
- Вставьте в свой проект и при необходимости измените под задачу.
- Проверьте зависимости и окружение (версии, переменные).
Конфигурация 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).