Ho un server web con molti server virtuali. Solo 1 dei quali è SSL. Il problema è che, poiché non esiste un blocco server catchall in ascolto per SSL, qualsiasi richiesta https verso gli altri siti viene servita dal blocco 1 SSL.
La mia configurazione, in sostanza, è simile a questa:
# 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;
# ...
}
Ora che non esiste un listener predefinito per 443, una richiesta simile https://server1.com
finirà per essere servita dal server2.com
blocco https. Questo segue la logica di server_name
nei documenti.
Se non vi è alcuna corrispondenza, verrà utilizzato un blocco {...} del server nel file di configurazione in base al seguente ordine:
- il blocco server con una direttiva di ascolto corrispondente contrassegnata come [default | default_server]
- il primo blocco server con una direttiva di ascolto corrispondente (o ascolto implicito 80;)
Qual è la soluzione preferita per questo problema? Devo impostare un certificato fittizio per il blocco catch all server solo per poter ascoltare 443 e gestire le richieste errate? Esiste un parametro di cui non sono a conoscenza che forza una corrispondenza esatta del nome host server
?