Eu tenho um servidor web com muitos servidores virtuais. Apenas 1 deles é SSL. O problema é que, como não há nenhum bloco de servidor completo que atenda ao SSL, qualquer solicitação https para outros sites é atendida pelo bloco 1 SSL.
Minha configuração, basicamente, fica assim:
# 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;
# ...
}
Agora, como não há um ouvinte padrão para 443, uma solicitação como https://server1.com
será finalizada pelo server2.com
bloco https. Isto segue a lógica para server_name
nos docs.
Se não houver correspondência, um bloco de servidor {...} no arquivo de configuração será usado com base na seguinte ordem:
- o bloco do servidor com uma diretiva de escuta correspondente marcada como [default | default_server]
- o primeiro bloco do servidor com uma diretiva de escuta correspondente (ou escuta implícita 80;)
Qual é a solução preferida para esse problema? Preciso configurar o certificado fictício para meu bloco catch all server apenas para que eu possa ouvir 443 e lidar com solicitações ruins? Existe um parâmetro que eu desconheço que força uma correspondência exata de nome de host server
?