Настройки nginx

Когда сервер работает по HTTP (порт 80), данные передаются незашифрованными, что делает их уязвимыми. HTTPS (порт 443) использует SSL/TLS для шифрования соединения, повышая безопасность.

Самоподписанный сертификат удобен в тестовых средах или для внутренних сервисов, когда нет необходимости в сертификате от центра сертификации (CA).

Если Nginx установлен, но сайт не открывается по HTTPS, вероятно, сервер не настроен на работу с SSL. В таких случаях нужно сгенерировать сертификат и обновить конфигурацию Nginx.

 

Генерация самоподписанного SSL-сертификата

Выполните команду для создания ключа и сертификата:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

Параметры команды:

  • -x509 — создание самоподписанного сертификата
  • -nodes — приватный ключ не будет зашифрован (Nginx не потребует пароль при каждом запуске)
  • -days 365 — срок действия сертификата (1 год)
  • -newkey rsa:2048 — генерация нового RSA-ключа (2048 бит)
  • -keyout — путь к приватному ключу
  • -out — путь к сертификату

Во время выполнения команды OpenSSL запросит у вас несколько параметров:

  • Country Name (2-letter code) — двухбуквенный код страны ISO 3166-1 alpha-2 (например, RU)
  • Common Name (e.g., server FQDN or YOUR name) — доменное имя сервера (если нет домена, можно указать IP)

Если вам нужен файл с DH-параметрами, создайте его командой

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

 

Настройка Nginx для работы с SSL

Открываем конфигурацию сайта (обычно /etc/nginx/sites-available/default):

sudo nano /etc/nginx/sites-available/default

Добавляем или редактируем блоки:

server {
    listen 443 ssl;
    server_name your_domain_or_ip;
    ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
    ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
    ssl_ecdh_curve secp384r1;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;
    ssl_stapling off;
    location / {
        root /var/www/html;
        index index.html;
    }
}
server {
    listen 80;
    server_name your_domain_or_ip;
    return 301 https://$host$request_uri;
}

Что делают эти настройки:

  • Сервер на порту 443 использует SSL и загружает сертификат
  • Сервер на порту 80 автоматически перенаправляет HTTP-запросы на HTTPS

Сохраняем изменения и проверяем конфигурацию:

sudo nginx -t

Если ошибок нет, перезапускаем Nginx:

sudo systemctl restart nginx

 

Проверка работы HTTPS

Откройте браузер и перейдите по адресу https://{ваш_домен_или_IP}. Если все настроено правильно, сайт загрузится. Браузер может предупредить, что сертификат недоверенный — это нормально для самоподписанных сертификатов.

Если сайт не открывается:

  • Проверьте конфигурацию Nginx (sudo nginx -t)
  • Убедитесь, что порт 443 открыт (sudo netstat -tulnp | grep nginx)
  • Перезапустите Nginx (sudo systemctl restart nginx)

Теперь ваш сервер поддерживает HTTPS. Если вам нужен сертификат без предупреждений в браузере, используйте бесплатные сертификаты от Let's Encrypt.