Chuyển hướng tất cả các yêu cầu đến HTTPS, ngoại trừ một thư mục con


12

Tôi đang cố gắng chuyển từ chứng chỉ tự ký sang chứng chỉ Let Encrypt trên máy chủ web nginx của mình.

Hiện nay, tôi chuyển hướng tất cả các yêu cầu đến http/80để https/443, trong đó sử dụng một ký tự giấy chứng nhận tôi đã tạo một thời gian trước đây.

Bây giờ - từ những gì tôi hiểu, Let's Encrypt đưa ra yêu cầu tới cổng 80 (như tôi đang sử dụng webroottùy chọn certbot). Các yêu cầu này được chuyển hướng, làm cho việc tạo chứng chỉ không thành công.

Tôi đã cố gắng để đạt được điều này với khối máy chủ sau, nghe ở cổng 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;
        }
}

Nhưng yêu cầu /.well-knownđược chuyển hướng đến https/443dù sao.

Làm cách nào tôi có thể chuyển hướng tất cả các yêu cầu từ http/80đến https/443, ngoại trừ các yêu cầu đến /.well-known/?


1
Theo như tôi biết, webrootcác certbottùy chọn đòi hỏi đồng bằng http.
SaAtomic

2
Làm thế nào bạn kiểm tra chuyển hướng? Tôi đoán trình duyệt của bạn tôn trọng các tiêu đề HSTS cho tên miền của bạn, nhưng hãy để bot mã hóa sẽ bỏ qua nó. Kiểm tra với wget/curl
Alexey Ten

Câu trả lời:


16

Thử đi:

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

Vì không có try_filesmục nào trong máy chủ ảo của bạn, nên nó không biết phải làm gì với các yêu cầu đến /.well-known.


2
locationmà không try_filescần gửi tập tin từ rootthư mục.
Alexey Ten

1
Thật kỳ lạ, tôi có cùng một tình huống và tôi không sử dụng try_filesvà nó hoạt động hoàn toàn tốt với tôi. Trong thực tế, tôi có cấu hình chính xác như được nêu trong câu hỏi. Chỉ có sự khác biệt là location /.well-known/thay vì location /.well-known(lưu ý dấu gạch chéo). Vì vậy, có lẽ đó là vấn đề?
Olle Kelderman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.