A ordem das linhas é importante no Nginx?

3

Eu tenho um arquivo do servidor como este

server {
listen 80;
server_name subdomain.example.com;

return 301 https://$server_name$request_uri;

location /.well-known/acme-challenge {
        root /var/www/letsencrypt;
    }
}

Agora, quando eu tento sudo letsencrypt renew . Ele aumenta e o erro não consegue encontrar .well-known/acme-challenge . Mas assim que eu comentei a linha return 301 reiniciei o servidor e funcionou.

Agora, quero testar novamente colocando o local primeiro e não comentando a instrução de retorno 301, mas ele diz certificate not due for renewal .Assim, a pergunta é que a ordem na qual o arquivo é lido é importante? e não irá renovar automaticamente por essa razão para mim, aqueles que fazem renovação como você lida com essa situação?

    
por Saras Arya 06.03.2017 / 10:31

3 respostas

3

Neste caso, não é tanto o pedido (uma boa explicação de como localização e regex é avaliada pode ser encontrada aqui: link ).

Para coisas como blocos de localização, a versão curta é a melhor combinação de vitórias, em vez da primeira correspondência.

No seu caso, no entanto, o pedido conta porque você usa return . Por link :

Stops processing and returns the specified code to a client. The non-standard code 444 closes a connection without sending a response header.

A chave aqui é que return pára imediatamente o processamento / avaliação, então o que está acontecendo é que o nginx não está olhando nada abaixo de return .

Você só precisa mover essa cláusula return abaixo do bloco de localização.

Quanto ao teste, eu tentaria adicionar --test-cert à sua linha de comando (consulte link ).

Isso deve evitar o "problema" que você está tendo ao tentar usar o servidor de produção, que informa que você tem um certificado válido e não precisa de um novo no momento.

    
por 06.03.2017 / 11:17
1

Você deve incluir sua diretiva return em um bloco location e, em seguida, usar as regras normais de correspondência de bloco location :

server {
    listen 80;
    server_name subdomain.example.com;

    location / {
        return 301 https://$server_name$request_uri;
    }

    location /.well-known/acme-challenge {
        root /var/www/letsencrypt;
    }
}
    
por 06.03.2017 / 12:35
0

answering for the idea of line orders in nginx config files

Sim, depende totalmente das diferentes diretivas especificadas no contexto diferente suportado pelo Nginx. Em termos leigos, o nginx mantém uma pilha de coisas para fazer e aplica certos algoritmos, respectivamente, com best match em mente.

O Nginx usa selection algorithm para tomar decisões no contexto server ; Baseada principalmente em duas directivas viz. listen e server_name .

Vários contextos de localização podem ser definidos, cada local é usado para manipular um determinado tipo de solicitação do cliente e cada local é selecionado em virtude da correspondência da definição de local com a solicitação do cliente por meio de selection algorithm .

O contexto upstream usa round-robin por padrão para determinar qual servidor específico entregar a solicitação.

    
por 26.07.2018 / 12:58