하나의 서브 디렉토리를 제외한 모든 요청을 HTTPS로 경로 재 지정


13

자체 서명 된 인증서에서 nginx 웹 서버의 인증서를 Let 's Encrypt 인증서로 이동하려고합니다.

현재 모든 요청을 http/80로 리디렉션합니다 https/443.

이제 내가 이해 한 것에서 Let 's Encrypt는 (의 webroot옵션을 사용하면서) 포트 80을 요청합니다 certbot. 이러한 요청은 리디렉션되어 인증서 생성에 실패합니다.

포트 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;
        }
}

그러나 요청 /.well-knownhttps/443어쨌든 리디렉션됩니다 .

요청을 제외한 모든 요청을 (으) http/80로 리디렉션 https/443하려면 /.well-known/어떻게 해야 합니까?


1
내가 아는 한 webrootof certbot옵션에는 일반 http가 필요합니다.
SaAtomic

2
리디렉션을 어떻게 확인 했습니까? 브라우저가 도메인의 HSTS 헤더를 존중한다고 생각하지만 봇을 무시하면 무시됩니다. 확인 wget/curl
Alexey Ten

답변:


17

이 시도:

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;
    }
}

try_files가상 서버에 항목 이 없으므로에 오는 요청으로 무엇을해야하는지 몰랐습니다 /.well-known.


2
location디렉토리 try_files에서 파일을 보내지 않고 root.
Alexey Ten

1
이상한, 나는 똑같은 상황을 가지고 있고 사용하지 try_files않으며 그것은 나에게 완벽하게 잘 작동합니다. 사실 나는 질문에 명시된 것과 동일한 구성을 가지고 있습니다. 유일한 차이점은 location /.well-known/대신 location /.well-known(후행 슬래시를 참고). 어쩌면 그게 문제가 있습니까?
Olle Kelderman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.