Tengo un servidor web con muchos servidores virtuales. Solo 1 de los cuales es SSL. El problema es que, debido a que no hay ningún bloque de servidor general que escuche SSL, cualquier solicitud https a los otros sitios es atendida por el bloque 1 SSL.
Mi configuración, esencialmente, se ve así:
# the catch all
server {
listen 80 default;
# I could add this, but since I have no default cert, I cannot enable SSL,
# and this listen ends up doing nothing (apparently).
# listen 443;
server_name _;
# ...
}
# some server
server {
listen 80;
server_name server1.com;
# ...
}
# some other server ...
server {
listen 80;
server_name server2.com;
# ...
}
# ... and it's https equivalent
server {
listen 443;
ssl on;
server_name server2.com;
# ...
}
Ahora, como no hay un escucha predeterminado para 443, una solicitud como https://server1.com
terminará siendo atendida por el server2.com
bloque https. Esto sigue la lógica server_name
en los documentos.
Si no hay coincidencia, se usará un bloque de servidor {...} en el archivo de configuración en función del siguiente orden:
- el bloque del servidor con una directiva de escucha coincidente marcada como [default | default_server]
- el primer bloque de servidor con una directiva de escucha coincidente (o escucha implícita 80;)
¿Cuál es la solución preferida para este problema? ¿Debo configurar un certificado ficticio para el bloqueo de todos los servidores para poder escuchar en 443 y manejar las solicitudes incorrectas? ¿Hay algún parámetro que desconozca que fuerce una coincidencia exacta del nombre de host con server
?