Redireccionar todas las solicitudes a HTTPS, excepto un subdirectorio

13

Estoy tratando de pasar de los certificados autofirmados a los certificados Let's Encrypt en mi servidor web nginx.

Actualmente, vuelvo a dirigir todas las solicitudes de http/80a https/443, que utiliza un certificado firmado creé hace un tiempo.

Ahora, por lo que entiendo, Let's Encrypt realiza una solicitud al puerto 80 (ya que estoy usando la webrootopción de certbot). Estas solicitudes se redirigen, lo que hace que la generación del certificado no tenga éxito.

Traté de lograr esto con el siguiente bloque de servidor, escuchando en el puerto 80:

server {
        listen  80;     
        server_name     sub.domain.tld;
        server_tokens   off;


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

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

Pero las solicitudes a /.well-knownse redirigen a de https/443todos modos.

¿Cómo puedo redirigir todas las solicitudes de http/80a https/443, excepto las solicitudes a /.well-known/?

SaAtomic
fuente
1
Por lo que yo sé, el webrootde certbotopción requiere llanura http.
SaAtomic
2
¿Cómo comprobaste la redirección? Supongo que su navegador respeta los encabezados HSTS para su dominio, pero cifremos el bot para ignorarlo. Consulte con wget/curl
Alexey Diez

Respuestas:

17

Prueba esto:

server {
    listen  80;     
    server_name     sub.domain.tld;
    server_tokens   off;

    root /var/www/letsencrypt;

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

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

Como no había ninguna try_filesentrada en su servidor virtual, no sabía qué hacer con las solicitudes que se recibían /.well-known.

Tero Kilkanen
fuente
2
locationsin try_filessolo envía el archivo desde el rootdirectorio.
Alexey Diez
1
raro, tengo exactamente la misma situación y no lo uso try_filesy funciona perfectamente bien para mí. De hecho, tengo exactamente la misma configuración que se indica en la pregunta. La única diferencia es en location /.well-known/lugar de location /.well-known(tenga en cuenta la barra diagonal final). Entonces, ¿quizás ahí es donde está el problema?
Olle Kelderman