Nginx SSL/HTTPS не работает

Вопрос или проблема

Я размещаю веб-сайт на своём Raspberry Pi, у меня динамический IP, поэтому я использую сервис, предоставляемый производителем моего маршрутизатора (Fritz box), который даёт мне доменное имя, ссылающееся на мой динамический IP (в моём случае sbalazs.selfhost.eu).

Я купил домен у pork bun (koeg.dev), что также выдало сертификат SSL Let’s Encrypt. Кроме того, я настроил запись CNAME для jam.koeg.dev, которая указывает на sbalazs.selfhost.eu.

Я хотел бы использовать nginx в качестве обратного прокси, чтобы направлять jam.koeg.dev на веб-приложение, которое я хостирую.

Моя проблема в том, что SSL не работает, и nginx отвечает на запросы с любого URL, а не только с jam.koeg.dev. Если я пробую подключиться с http://sbalazs.selfhost.eu:443, это работает, но когда https://jam.koeg.dev, возникает ошибка SSL (я не могу попробовать http://jam.koeg.dev, потому что TLD .dev требует SSL).

Вот файл ngix.conf:

events { }
http {
    server {
        listen 443 ssl;
        server_name jam.koeg.dev;

        ssl                  on;
        ssl_certificate      /ssl/domain.cert.pem;
        ssl_certificate_key  /ssl/private.key.pem;

        ssl_prefer_server_ciphers on;
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_session_tickets off;

        # промежуточная конфигурация. настройте под свои нужды.
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

        location / {
            proxy_pass http://app: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 https;
        }
    }
}

Ответ или решение

Проблема с настройкой SSL / HTTPS в Nginx, которую вы описываете, может быть вызвана различными причинами. Давайте разберем вашу ситуацию и предложим решения, чтобы обеспечить корректную работу SSL для вашего домена jam.koeg.dev.

Возможные причины проблемы и решения

  1. Проверка сертификатов

    • Убедитесь, что сертификат (domain.cert.pem) и ключ (private.key.pem) действительно соответствуют вашему домену jam.koeg.dev. Чтобы удостовериться в этом, вы можете использовать следующую команду:

      openssl x509 -in /ssl/domain.cert.pem -text -noout

      Проверьте, что "Common Name" (CN) соответствует вашему домену.

  2. Настройка CNAME записи

    • Убедитесь, что CNAME запись для jam.koeg.dev правильно настроена и ведёт на sbalazs.selfhost.eu, и что DNS изменения полностью распространились. Вы можете проверить это с помощью команды:

      nslookup jam.koeg.dev
  3. Настройка конфигурации Nginx

    • Обратите внимание, что в Nginx следует указать правильный путь до SSL сертификата и ключа. Кроме того, параметр ssl on; в вашей конфигурации устарел. Попробуйте обновить конфигурацию следующим образом:

      server {
       listen 443 ssl;
       server_name jam.koeg.dev;
      
       ssl_certificate      /ssl/domain.cert.pem;
       ssl_certificate_key  /ssl/private.key.pem;
      
       ssl_protocols       TLSv1.2 TLSv1.3;  # Рекомендуется использовать только TLSv1.2 и выше
       ssl_ciphers         'HIGH:!aNULL:!MD5';
       ssl_prefer_server_ciphers on;
      
       location / {
           proxy_pass http://app: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 https;
       }
      }
    • Обратите внимание на настройки шифрования: рекомендуется использовать только безопасные шифры. TLSv1.1 и более ранние версии больше не рекомендуются.

  4. Проверьте работу сервера

    • Убедитесь, что у вас установлен и работает сам Nginx, и вы перезагрузили его после внесения изменений в конфигурацию:

      sudo systemctl restart nginx
  5. Проверка на наличие ошибок

    • Проверьте логи Nginx, чтобы найти дополнительные подсказки о проблемах. Логи ошибок обычно находятся по адресу /var/log/nginx/error.log.
  6. Проблемы с фаерволлом или NAT

    • Убедитесь, что порты 80 и 443 открыты на вашем роутере и Raspberry Pi, а также проверьте настройки NAT, если они необходимы.

Заключение

Если после выполнения всех предложенных шагов проблема остаётся, попробуйте обратиться к услугам диагностики SSL (например, SSL Labs) для проверки конфигурации SSL вашего сайта. Это может помочь выявить проблемы, которые могли быть упущены. Успехов в настройке вашего Nginx!

Оцените материал
Добавить комментарий

Капча загружается...