У меня есть сервер, работающий на поддомене, настроенном так:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name x.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
<ssl configuration from https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=nginx-1.6.2&openssl=1.0.1t&hsts=no&profile=modern>
ssl_client_certificate /etc/ssl/certs/root-ca.crt;
ssl_verify_client on;
ssl_verify_depth 2;
root /var/www/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
В настоящее время я использую свой собственный корневой ЦС как для проверки клиента, так и в качестве основного сертификата сервера. Я хотел бы перейти на использование сертификата Let's Encrypt, но это создает проблему, поскольку для процесса проверки Let's Encrypt потребуется доступ к x.example.com/.well-known
и не будет иметь соответствующего сертификата клиента.
Я пробовал добавить второй серверный блок, как рекомендовано Вот, но мне не удалось заставить его работать:
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name x.example.com;
<same Mozilla configuration--I've got it stored as a snippet>
ssl_verify_client off;
root /var/www/html;
index index.html index.htm;
location /.well-known {
try_files $uri $uri/ =404;
}
}
Как это сделать?
Let's Encrypt не ищет проблем на HTTPS, поэтому вы можете просто настроить что-то вроде этого:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name x.example.com;
location /.well-known {
try_files $uri $uri/ =404;
}
location / {
return 301 https://$server_name$request_uri;
}
}
server {
listen 443 ssl;
listen [::]:443 ssl;
<ssl configuration from https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=nginx-1.6.2&openssl=1.0.1t&hsts=no&profile=modern>
ssl_client_certificate /etc/ssl/certs/root-ca.crt;
ssl_verify_client on;
ssl_verify_depth 2;
root /var/www/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}