NGINX redireciona tudo, exceto o letsencrypt para https

2

Eu tenho uma configuração simples, redireciono tudo, exceto as solicitações letsencrypt para https, e depois tenho meus hosts virtuais somente em https.

Atualmente, todas as minhas solicitações são redirecionadas para https e, em seguida, um 404 para letsencrypt:

Esta é minha configuração ...

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name _;
        location ^~ /.well-known/acme-challenge/ {
            allow all;
            default_type text/plain;
            return 200 "$1.abcd-efgh";
        }

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

server {
    listen 443 ssl;
    server_name plex.my_domain.com;

    ssl_session_timeout 30m;
    ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
    ssl_certificate      /root/.acme.sh/plex.my_domain.com/fullchain.cer;
    ssl_certificate_key  /root/.acme.sh/plex.my_domain.com/plex.my_domain.com.key;
    ssl_session_cache shared:SSL:10m;


    add_header X-Xss-Protection "1; mode=block" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Strict-Transport-Security "max-age=2592000; includeSubdomains" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    proxy_hide_header X-Powered-By;
    add_header 'Referrer-Policy' 'no-referrer';
    add_header Content-Security-Policy "frame-ancestors my_domain.com plex.my_domain.com;";


    location / {
        proxy_pass http://127.0.0.1:32400;

        proxy_set_header Range $http_range;
        proxy_set_header If-Range $http_if_range;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        #Next three lines allow websockets
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
    
por Richard87 17.09.2017 / 13:41

2 respostas

2

Você tem cabeçalhos de HSTS definidos no seu bloco de servidor https. Isso significa que, se você visitar seu site com https uma vez com seu navegador, seu navegador sempre se conectará ao seu domínio com https após a primeira visita.

Isso significa que você não pode testar sua configuração com um navegador. Você precisa testá-lo com curl ou ferramenta similar que não armazena listas HSTS.

Existe um pequeno ajuste para a sua configuração, você pode usar uma simples correspondência de prefixo location /.well-known/acme-challenge para o seu local LetsEncrypt. O nginx usará a correspondência mais específica dos blocos location .

    
por 17.09.2017 / 14:49
1

Bem, não foi o HSTS no meu caso

server {
    # ...
    location /.well-known/acme-challenge/ {
        # put your configuration here, if needed
    }
    location / {
        return 301 https://$server_name$request_uri;
    }
}

Resumo: insira o redirecionamento 301 dentro do local /

    
por 28.08.2018 / 12:54