Tengo un nginx y diferentes subdominios:
a.mydomain.com
b.mydomain.com
c.mydomain.com
Nginx tiene 4 reglas:
1) regla de reescritura:
server {
listen 80
server_name gl.udesk.org;
root /nowhere;
rewrite ^ https://a.mydomain.com$request_uri permanent;
}
2) regla 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) regla predeterminada de http:
server {
listen 80 default_server;
return 444;
}
4) regla predeterminada de https:
server {
listen 443 default_server;
return 444;
}
Entonces, si comienzo nginx y:
- si voy en el navegador a http://a.mydomain.com , redirige a https://a.mydomain.com y luego devuelve un error 107 (net :: ERR_SSL_PROTOCOL_ERROR): error de protocolo SSL.
- si voy en el navegador a https://b.mydomain.com , espero que devuelva el error 444. Pero en su lugar, devuelve el mismo error 107 (net :: ERR_SSL_PROTOCOL_ERROR): error de protocolo SSL.
- y para todos los registrados por el proveedor de DNS CNAME (es decir, a, b, c)
- Todas las versiones http (p. ej., regla 3) funcionan como se esperaba:
- http://a.mydomain.com redirige a la versión https: //,
- http://b.midominio.com y http://c.midominio.com devuelven un error 444 como está configurado.
Entonces, ¿por qué las reglas https en nginx son tan difíciles de configurar y cómo debo configurarlas correctamente para obtener el mismo comportamiento que con la versión http?
Actualizar:
Crear un nuevo certificado y agregar:
ssl on;
ssl_certificate conf.d/ssl/default.crt;
ssl_certificate_key conf.d/ssl/default.key;
funciona ahora, pero tendría una solución sin ningún certificado SSL necesario. Simplemente restablezca todas las conexiones para todos los subdominios https (puerto 443) excepto https://a.mydomain.com sin proporcionar un certificado.
nginx
no es lo suficientemente inteligente como para darse cuenta de que no necesita un certificado para lo que el usuario quiere hacer.