um arquivo dentro /etc/nginx/sites-enabled
tem o seguinte
server {
server_name production.domain.club cspiero.domain.club;
root /home/deploy/domain/current/public;
[...]
ssl_certificate /etc/letsencrypt/live/cspiero.domain.club/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/cspiero.domain.club/privkey.pem; # managed by Certbot
[...]
server {
if ($host = production.domain.club) {
return 301 https://$host$request_uri;
}
listen 80;
listen [::]:80;
}
server {
if ($host = cspiero.domain.club) {
return 301 https://$host$request_uri;
}
listen 80;
listen [::]:80;
}
while nginx -t
passa, o comportamento real do servidor é que o domínio de terceiro nível production
está sendo renderizado conforme esperado, enquanto cspiero
não está sendo roteado para o mesmo local, mas sendo processado pela configuração padrão (o navegador também recebe uma resposta http, ignorando assim o certificado )
server {
root /home/deploy/default;
index index.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
Por que isso está acontecendo? Há um desejo de manter a configuração padrão para todas as outras solicitações de expedição de pesca (tornando algo muito leve e sem graça). O que deve ser feito neste contexto então?
Você tem três blocos de servidor "padrão", pois há três blocos sem
server_name
ou usando o nome falso_
. Consulte a documentação no servidor pega-tudo.Portanto, qualquer solicitação que apareça na porta 80 será processada pelo primeiro desses blocos de servidor. São todas as solicitações, independentemente do nome de domínio.
Existem muitos exemplos usando o
if ($host =
padrão, mas a maioria vem de edições geradas automaticamente pelo certbot porque é difícil fazer isso corretamente.A solução correta é substituir os
if
blocos por umaserver_name
instrução. Na verdade, você pode combinar dois deles em um únicoserver
bloco.Substituir:
Com: