Eu tenho um certificado SSL curinga e vários subdomínios no mesmo ip. Agora, quero que o meu nginx manipule apenas os nomes de servidor mencionados e elimine a conexão de outros, para que pareça que nginx
não está sendo executado por nomes de servidores não listados (sem responder, rejeitar, inoperante, sem um único byte em resposta). Eu faço o seguinte
ssl_certificate tls/domain.crt;
ssl_certificate_key tls/domain.key;
server {
listen 1.2.3.4:443 ssl;
server_name validname.domain.com;
//
}
server {
listen 1.2.3.4:443 ssl;
server_name _;
// deny all;
// return 444;
// return 404;
//location {
// deny all;
//}
}
Eu tentei quase tudo no último bloco de servidores, mas sem sucesso. Recebo resposta válida do servidor virtual conhecido ou código de erro. Por favor ajude.
nginx
ssl
virtualhost
ssl-certificate
andbi
fonte
fonte
A resposta por cjc já apontou corretamente o problema ao tentar corresponder os nomes de host quando o SSL está ativado. No entanto, é possível fazê-lo, assim:
Nota: sim, é verdade que geralmente
if
é mau , mas é seguro usáif
-lo neste caso. (Leia a página vinculada se precisar se convencer.)Ao contrário do que foi sugerido, apenas adicionar o seguinte bloco não funcionará:
porque um certificado SSL correspondente
validname.domain.com
não corresponde a um nome de domínio aleatório. Eu tentei e o nginx agiu como se o bloco não estivesse presente.Isso também não funcionará:
porque fará com que todas as conexões HTTPS na porta 443 falhem, mesmo aquelas que devem passar. Eu tentei este também.
wget
relatou um erro de handshake SSL.fonte
A maioria das respostas aqui são sobre por que não funciona, não como fazê-lo funcionar.
Aqui está como - você precisa tornar esse servidor abrangente um 'default_server' e precisa fornecer caminhos para cert / key para que ele possa descriptografar a solicitação de entrada SSL e corresponder ao cabeçalho Host:
Observe o ssl_certificate / ssl_certificate_key lá. Se eles não forem especificados, o nginx ainda tentará usar esse servidor_servidor padrão e falhará, pois não pode aceitar a conexão ssl sem uma chave / certificado. Pode-se usar qualquer certificado / chave, por exemplo, autoassinado. ...
Para gerar um certificado autoassinado:
Consulte também /server//a/841643/87439
fonte
Eu implementei a solução acima hoje e funcionou muito bem. Todos os URLs não especificados são descartados agora. Colocar esse código do servidor antes da entrada real do servidor virtual foi fundamental - todos os URLs malformados agora passam para esse servidor 'padrão'.
fonte
Você deve conseguir lidar com isso, tornando o servidor que lida com os itens não listados o primeiro bloco de servidor em sua configuração.
Todos os domínios não identificados especificamente serão tratados por este bloco de servidor.
fonte