NGINX перенаправляет на HTTPS, сохраняя при этом маршрут HTTP для вызовов Let's Encrypt - PullRequest
0 голосов
/ 05 ноября 2019

Я могу успешно перенаправить трафик с порта 80 на HTTPS, а также успешно получить SSL-сертификат Let's Encrypt. Но моя проблема начинается, когда я хочу выполнить и .

Когда истекает срок действия моих сертификатов, я должен настроить конфигурацию для прохождения испытаний Let's Encrypt. И это бесполезно.

Вот конфиг, который успешно проходит испытания успешно

server {
    listen      80;
    listen [::]:80;
    server_name example.com *.example.com;

    #for certbot challenges (renewal process)
    location ~ /.well-known/acme-challenge {
        allow all;
        root /data/letsencrypt;
    }

    root /data/letsencrypt;
    index index.html;
}

А вот конфиг, который направляет трафик на HTTPS

server {
    listen      80 default_server;
    listen [::]:80 default_server;
    server_name example.com *.example.com;

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

    return      444;
}

Всякий раз, когда я начинаю пытаться объединить их, кажется, что начинается маршрутизация к HTTPS, и проблемы срываются.

Также полезно отметить, что яиспользуя Nginx в качестве обратного прокси в среде Docker, поэтому из HTTP я перенаправляю на HTTPS, а оттуда я использую обратный прокси для других сервисов.

1 Ответ

0 голосов
/ 06 ноября 2019
server{

    listen      80;
    listen [::]:80;
    server_name example.com *.example.com;

    #for certbot challenges (renewal process)
    location ~ ^/.well-known/acme-challenge {
        allow all;
        root /data/letsencrypt;
    }

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

Должен сделать трюк.

Если порт 80 и начинается с /.well-known/acme-challenge, он идет на вызов.

все остальное: от 301 до https,

И приоритет при проверке - это сначала регулярное выражение (местоположение ~ ^ blablabla), а затем общее (местоположение / {)

Если это не работает, какое у вас взаимодействие?

...