Здравствуйте. У меня на сервер привязаны все домены 3 уровня. Т.е если перейти dev1.site.ru или alex.site.ru все будет вести ко мне на сервер. Nginx конфиг для этого простой:
server {
listen 80;
server_name ~^(www\.)?(?.+)$;
root /var/www/users/$domain;
}
Данная конструкция отлично работает. Но появилась необходимость проверять папку с ssl сертификатами, и если для домена там есть сертификаты - подключать их. Для тестов использовал бесплатный сертификат letsencrypt.
Идея такова, делаю два таких конфига, один на 80 порт, второй на 443 ssl
во втором подключаю сертификат, а в первом проверяю есть ли файл сертификата. Если есть - редирект.
if (-f /var/ssl/$domain/privkey.pem) {
rewrite ^/(.*)$
https://$domain/$1 permanent;
}
Отрабатывает все на ура. Но..
ssl_certificate /etc/letsencrypt/live/$domain/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/$domain/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
Браузер говорит мне:
Этот сайт не может обеспечить безопасное соединение Сайт dev1.site.ru отправил недействительный ответ.
ERR_SSL_PROTOCOL_ERROR
Но если я подключаю сертификат по прямому пути, все работает:
ssl_certificate /etc/letsencrypt/live/dev1.site.ru/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/dev1.site.ru/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
Магия какая то..