Alihkan semua permintaan ke HTTPS, kecuali untuk satu subdirektori

13

Saya mencoba untuk beralih dari sertifikat yang ditandatangani sendiri ke Mari Enkripsi sertifikat di server web nginx saya.

Saat ini, saya mengarahkan semua permintaan untuk http/80ke https/443, yang menggunakan sertifikat yang ditandatangani sendiri saya buat beberapa waktu lalu.

Sekarang - dari apa yang saya mengerti Let's Encrypt membuat permintaan ke port 80 (karena saya menggunakan webrootopsi certbot). Permintaan ini dialihkan, yang menyebabkan pembuatan sertifikat tidak berhasil.

Saya mencoba mencapai ini dengan blok server berikut, mendengarkan di port 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;
        }
}

Tetapi permintaan untuk /.well-knowndialihkan ke https/443anyways.

Bagaimana saya bisa mengalihkan semua permintaan dari http/80ke https/443, kecuali permintaan ke /.well-known/?

SaAtomic
sumber
1
Sejauh yang saya tahu, yang webrootdari certbotopsi membutuhkan http polos.
SaAtomic
2
Bagaimana Anda memeriksa pengalihan? Saya kira browser Anda menghormati header HSTS untuk domain Anda, tapi mari kita mengenkripsi bot akan mengabaikannya. Periksa dengan wget/curl
Alexey Ten

Jawaban:

17

Coba ini:

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

Karena tidak ada try_filesentri di server virtual Anda, itu tidak tahu apa yang harus dilakukan dengan permintaan yang masuk /.well-known.

Tero Kilkanen
sumber
2
locationtanpa try_fileshanya mengirim file dari rootdirektori.
Alexey Ten
1
aneh, saya memiliki situasi yang sama persis dan saya tidak menggunakan try_filesdan berfungsi dengan baik untuk saya. Sebenarnya saya memiliki konfigurasi yang sama persis seperti yang dinyatakan dalam pertanyaan. Hanya perbedaan yang location /.well-known/terjadi location /.well-known(perhatikan garis miringnya). Jadi, mungkin di situlah masalahnya?
Olle Kelderman