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 не работает (я имею в виду, что используется http вместо https), и 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 на Raspberry Pi, необходимо проследить за несколькими аспектами настройки. Давайте разберем вашу конфигурацию и выявим возможные ошибки.

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

Убедитесь, что ваши сертификаты (ssl_certificate и ssl_certificate_key) правильно указаны в конфигурационном файле. Проверьте, что файлы действительно находятся по указанным путям: /ssl/domain.cert.pem и /ssl/private.key.pem.

2. Конфигурация сервера

Ваше текущее конфиг-программе выглядит следующим образом:

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:...'; # Убедитесь, что этот список актуален.

    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;
    }
}

3. Обновление конфигурации

Убрано устаревшее:

  • Удалите строку ssl on;. Для конфигурации с nginx это больше не требуется.

Обновление протоколов:

  • Рекомендуется использовать более современные версии TLS. Например:
    ssl_protocols TLSv1.2 TLSv1.3;  # TLSv1.3 уже поддерживается большинством современных браузеров.

Обновление структуры конфигурации:
Используйте следующую структуру:

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;
    ssl_ciphers         'HIGH:!aNULL:!MD5';

    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;
    }
}

4. Проверка CNAME и DNS

Убедитесь, что DNS-запись для jam.koeg.dev действительно указывает на ваш домен sbalazs.selfhost.eu. Вы можете использовать команды nslookup jam.koeg.dev или dig jam.koeg.dev для подтверждения этого.

5. Перезапуск Nginx

После внесения всех изменений перезапустите Nginx, чтобы новые настройки вступили в силу:

sudo systemctl restart nginx

6. Проверка конфигурации

После перезапуска проверьте корректность конфигурации nginx на наличие ошибок:

sudo nginx -t

Это обеспечит, что все синтаксические ошибки будут выявлены до перезапуска сервиса.

7. Дополнительная проверка

Проверьте свой сайт с помощью инструментов, таких как SSL Labs, для получения подробной информации об установленных сертификатах и настройках.

Заключение

Следуя вышеперечисленным шагам, вы сможете решить проблему с HTTPS для вашего домена jam.koeg.dev. Если проблема все еще сохраняется, проверьте журналы ошибок nginx (/var/log/nginx/error.log) для получения дополнительной информации о том, что может быть не так.

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

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