Gymterview
middle

Как настроить HTTPS в Nginx с редиректом с HTTP?

Настройка HTTPS в Nginx — это конфигурация TLS-терминации на reverse proxy с обязательным перенаправлением HTTP-трафика на защищённое соединение.

Базовая конфигурация HTTPS

Полная конфигурация Nginx с HTTPS
# /etc/nginx/sites-available/mybank-api
server {
    listen 443 ssl http2;
    server_name api.mybank.com;

    # Сертификаты
    ssl_certificate     /etc/nginx/ssl/api.mybank.com.crt;
    ssl_certificate_key /etc/nginx/ssl/api.mybank.com.key;

    # Цепочка промежуточных сертификатов
    ssl_trusted_certificate /etc/nginx/ssl/ca-chain.crt;

    # Протоколы и шифры
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers on;

    # Оптимизация SSL
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_session_tickets off;

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;

    # Заголовки безопасности
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options DENY;
    add_header X-XSS-Protection "1; mode=block";

    # Проксирование на Java-приложение
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Редирект с HTTP на HTTPS

Пример
server {
    listen 80;
    server_name api.mybank.com;

    # Редирект всех HTTP-запросов на HTTPS
    return 301 https://$host$request_uri;
}

Настройка с Let’s Encrypt

Пример
# Получить сертификат и автоматически настроить Nginx
sudo certbot --nginx -d api.mybank.com

# Проверка конфигурации
sudo nginx -t

# Перезагрузка
sudo systemctl reload nginx

Проверка настроек SSL

Пример
# Проверка соединения
openssl s_client -connect api.mybank.com:443

# Проверка поддерживаемых протоколов
nmap --script ssl-enum-ciphers -p 443 api.mybank.com

В Spring Boot приложении за Nginx необходимо настроить доверие к заголовкам X-Forwarded-*:

Пример
server:
  forward-headers-strategy: framework  # или native

На собеседовании: интервьюер проверяет понимание TLS-терминации на Nginx, знание заголовков безопасности (HSTS, X-Frame-Options) и настройки проксирования к Java-приложению. Частая ошибка — забыть про редирект с HTTP и про заголовок X-Forwarded-Proto.