Vamos criptografar usando webroot no nginx com um redirecionamento SSL

4

Eu tenho um site sendo atendido com nginx com os seguintes requisitos:

  1. Redirecionar todos os http - > https
  2. Tempo de inatividade zero Vamos criptografar a renovação de certificado

Para satisfazer (1), tenho um pequeno redirecionamento http- > https no meu nginx config. A fim de satisfazer (2) eu precisarei modificar a configuração para que eu possa usar o método de criptografia Vamos Criptografar Webroot.

Estou tentando descobrir a solução ideal que satisfará os dois requisitos. Eu vim com o seguinte, o que funciona.

Antes:

server {
    listen 80;
    server_name example.com;
    return 301 https://example.com$request_uri;
}

Depois:

server {
    listen 80;
    server_name example.com;
    location ~ /\.well-known\/acme-challenge {
        root /usr/share/nginx/html;
        allow all;
    }
    if ($request_uri !~ /\.well-known) {
        return 301 https://example.com$request_uri;
    }
}

No entanto, eu estava esperando descobrir outra maneira de fazer isso. As razões para isso são:

  1. se for mal . Pode não ser um problema tão grande nesse caso, porque esse é apenas o redirecionamento http-> https, que deve ser muito baixo tráfego.

  2. Mais importante, evitar o if tornaria mais fácil aplicar a autenticação da webroot a todos os meus sites que estão em execução atrás de nginx , pois eu poderia plopar essa diretiva location em .conf poderia incluir willy-nilly dentro de todos os meus pequenos blocos de redirecionamento http- > https.

Em esta pergunta , Alex dá uma exemplo usando uma instrução return nua, mas isso não funciona para mim ( nginx -t reclama com nginx: [emerg] invalid number of arguments in "return" directive in /etc/nginx/... ).

Existe uma maneira melhor de fazer isso? Ou a minha solução é tão boa quanto parece?

    
por mgalgs 11.11.2016 / 05:10

1 resposta

5

Você pode substituir o if por um local normal:

server {
    listen 80;
    server_name example.com;
    location /.well-known/acme-challenge {
        root /usr/share/nginx/html;
        allow all;
    }
    location / {
        return 301 https://example.com$request_uri;
    }
}

Motivo: o local com o maior prefixo correspondente é selecionado e lembrado.

To find location matching a given request, nginx first checks locations defined using the prefix strings (prefix locations). Among them, the location with the longest matching prefix is selected and remembered. Then regular expressions are checked, in the order of their appearance in the configuration file. The search of regular expressions terminates on the first match, and the corresponding configuration is used. If no match with a regular expression is found then the configuration of the prefix location remembered earlier is used.

Fonte: Nginx Docs

    
por 11.11.2016 / 23:26