Ho un nginx e diversi sottodomini:
a.mydomain.com
b.mydomain.com
c.mydomain.com
Nginx ha 4 regole:
1) regola di riscrittura:
server {
listen 80
server_name gl.udesk.org;
root /nowhere;
rewrite ^ https://a.mydomain.com$request_uri permanent;
}
2) regola https:
server {
listen 443;
server_name a.mydomain.com;
root /home/a/a/public;
ssl on;
ssl_certificate conf.d/ssl/a.crt;
ssl_certificate_key conf.d/ssl/a.key;
ssl_protocols ...
ssl_ciphers ...
ssl_prefer_server_ciphers on;
location ...
}
3) regola predefinita http:
server {
listen 80 default_server;
return 444;
}
4) regola predefinita https:
server {
listen 443 default_server;
return 444;
}
Quindi, se inizio nginx e:
- se vado nel browser a http://a.mydomain.com reindirizza a https://a.mydomain.com e quindi restituisce un errore 107 (net :: ERR_SSL_PROTOCOL_ERROR): errore del protocollo SSL.
- se vado nel browser a https://b.mydomain.com mi aspetto che restituisca l'errore 444 indietro. Ma invece restituisce lo stesso errore 107 (net :: ERR_SSL_PROTOCOL_ERROR): errore protocollo SSL.
- e così per tutti registrati dal CNAME dei provider DNS (ovvero a, b, c)
- tutte le versioni http (es. regola 3 -) funzionano come previsto:
- http://a.mydomain.com reindirizza alla versione https: //,
- http://b.mydomain.com e http://c.mydomain.com stanno restituendo un errore 444 come configurato.
Quindi perché le regole https in nginx sono così difficili da configurare e come devo configurarle correttamente per ottenere lo stesso comportamento della versione http?
Aggiornare:
Creazione di un nuovo certificato e aggiunta:
ssl on;
ssl_certificate conf.d/ssl/default.crt;
ssl_certificate_key conf.d/ssl/default.key;
funziona ora, ma avrei una soluzione senza alcun certificato SSL necessario. Ripristina tutte le connessioni per tutti i sottodomini https (porta 443) tranne https://a.mydomain.com senza fornire un certificato.
nginx
non è abbastanza intelligente da capire che non ha bisogno di un certificato per ciò che l'utente vuole fare.