Tengo varios servidores ejecutándose en la misma máquina, algunos solo con http, algunos con http y https. Hay varios bloques de servidor definidos en archivos separados que se incluyen desde el archivo de configuración principal.
He configurado un servidor "predeterminado" para http que servirá una "página de mantenimiento" genérica para solicitudes que no coincidan con ninguno de los otros nombres de servidor en los otros archivos de configuración. El servidor predeterminado http funciona como se espera, utiliza el nombre_servidor "_" y aparece primero en la lista de inclusiones (porque he observado que en el caso de nombres_servidores duplicados en los servidores, se usa el que aparece primero). Esto funciona muy bien.
Esperaría el mismo bloque de servidor exacto (solo cambiando "listen 80 default_server" a "listen 443 default_server" y también en lugar de servir la página "return 444"), pero no lo hace. En cambio, parece que el nuevo servidor https predeterminado en realidad está tomando todas las conexiones https entrantes y provoca que fallen, aunque los otros bloques del servidor tienen nombres de servidor más apropiados para las solicitudes entrantes. La eliminación del nuevo servidor https predeterminado hará que se reanude el comportamiento semi-correcto: todos los sitios web con https se cargarán correctamente; pero los sitios web sin https se enrutarán al primer servidor https en los archivos de inclusión (que según los documentos, si no aparece "default_server", el primer bloque del servidor que aparecerá será "predeterminado").
Entonces mi pregunta es, ¿cuál es la forma correcta de definir un "servidor predeterminado" en nginx para conexiones SSL? ¿Por qué es que cuando establezco explícitamente un "servidor predeterminado" se vuelve codicioso y toma todas las conexiones, mientras que cuando implícitamente dejo que nginx decida el "servidor predeterminado" funciona como esperaría (con el servidor incorrecto configurado como predeterminado y los otros servidores reales comportarse correctamente)?
Aquí están mis "servidores predeterminados". Http funciona sin romper otros servidores. Https rompe otros servidores y consume todo.
server {
listen 443 ssl default_server;
server_name _;
access_log /var/log/nginx/maintenance.access.log;
error_log /var/log/nginx/maintenance.error.log error;
return 444;
}
server {
listen *:80 default_server;
server_name _;
charset utf-8;
access_log /var/log/nginx/maintenance.access.log;
error_log /var/log/nginx/maintenance.error.log error;
root /home/path/to/templates;
location / {
return 503;
}
error_page 503 @maintenance;
location @maintenance {
rewrite ^(.*)$ /maintenance.html break;
}
}
¿Alguno de ustedes ve lo que podría estar mal aquí?