Como encaminhar todas as requisições http para https sem quebrar o letsencrypt com nginx

1

Estou usando o Nginx para servir como um proxy reverso para o servidor Rstudio e o servidor Shiny com a finalidade de proteger a conexão com esses serviços. Estou usando Letencrypt de graça, certificados assinados.

Eu tenho esta entrada para o letsencrypt para verificar se eu sou quem digo que sou.

server { 
  listen 80 default_server;
  listen [::]:80 default_server ipv6only=on;

  root /usr/share/nginx/html;
  index index.html index.htm;

  # Make site accessible from http://localhost/
  server_name mydomain.com;

  location ~ /.well-known {

    allow all;
  }
}

Eu também tenho outro server para escutar 443 e proxy_redirect para meus servidores. Tudo lá funciona bem. O que eu quero fazer é algo como

server {
listen 80;
return 301 https://$host$request_uri;
}

mas acho que isso quebrará o letsencrypt, então como faço para ter o acima sem quebrar a verificação do letsencrypt?

    
por Dean MacGregor 27.04.2016 / 13:30

1 resposta

4

Minha configuração de trabalho para isso é:

server {
         listen 80;
         listen [::]:80;
         server_name example.com www.example.com;

         root /srv/www/empty;

         include includes/letsencrypt;

         location / {
                 return 301 https://www.example.com$request_uri;
         }
}

onde /etc/nginx/includes/letsencrypt é Ansible gerenciado e contém:

location /.well-known/acme-challenge/ {
         try_files $uri =404;
}

e /srv/www/empty é um diretório vazio, que contém apenas arquivos quando o Let's Encrypt está sendo usado para emitir um desafio (com --webroot ).

Vamos Criptografar é então executado com:

letsencrypt certonly --webroot -w /srv/www/empty -d example.com -d www.example.com
    
por 27.04.2016 / 21:00