Вопрос или проблема
Я хостю сайт на своем 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
) для получения дополнительной информации о том, что может быть не так.