Перенаправити всі запити на HTTPS, за винятком одного підкаталогу


13

Я намагаюся перейти від самопідписаних сертифікатів до сертифікатів Let’s Encrypt на своєму веб-сервері nginx.

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

Тепер - з того, що я розумію, давайте 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/?


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(відзначте проділ). Тож, може, там проблема?
Оле Келдерман
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.