Перенаправить все запросы в HTTPS, кроме одного подкаталога

13

Я пытаюсь перейти от самозаверяющих сертификатов к сертификатам Let's Encrypt на моем веб-сервере nginx.

В настоящее время я перенаправлять все запросы http/80к https/443, который использует самостоятельно подписанный сертификат , который я создал некоторое время назад.

Теперь - из того, что я понимаю, Let's Encrypt делает запрос на порт 80 (так как я использую webrootопцию 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-knownперенаправляются в https/443любом случае.

Как я могу перенаправить все запросы с http/80на https/443, кроме запросов на /.well-known/?

SaAtomic
источник
1
Насколько я знаю, то webrootиз certbotварианта требует простого HTTP.
SaAtomic
2
Как вы проверили редирект? Я предполагаю, что ваш браузер уважает заголовки HSTS для вашего домена, но давайте шифровать бот будет игнорировать его. Посоветуйтесь с wget/curl
Алексеем Теном

Ответы:

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каталога.
Алексей Тен
1
странно, у меня точно такая же ситуация, и я не использую, try_filesи она прекрасно работает для меня. На самом деле у меня точно такой же конфиг, как указано в вопросе. Единственная разница location /.well-known/вместо location /.well-known(обратите внимание на косую черту). Так может в этом проблема?
Олле Кельдерман,