Điểm:0

Nginx, không thể chuyển hướng miền www sang miền https không phải www khi sử dụng certbot

lá cờ us

Mặc dù có rất nhiều ví dụ trực tuyến, tôi đã thử rất nhiều thứ, cụ thể là sử dụng câu lệnh if, nhưng cho đến nay tôi vẫn không thể thiết lập vhost của mình đúng cách

Vì vậy, vhost của tôi là

    a1.example.com

www.a1.example.com nên chuyển hướng đến https://a1.example.com
a1.example.com nên chuyển hướng đến https://a1.example.com

Mục tiêu là chuyển hướng nó đến https không phải www mỗi lần.

Đây là vhost của tôi cho đến nay, tôi đang sử dụng certbot

người phục vụ {
     server_name a1.example.com www.a1.example.com;
     gốc/var/www/ví dụ/bản dựng;

     chỉ mục index.html index.htm;

     địa điểm / {
          try_files $uri $uri/ =404;
     }

    lắng nghe [::]:443 ssl ipv6only=on; # được quản lý bởi Certbot
    nghe 443 ssl; # được quản lý bởi Certbot
    ssl_certificate /etc/letsencrypt/live/a1.example.com/fullchain.pem; # được quản lý bởi Certbot
    ssl_certificate_key /etc/letsencrypt/live/a1.example.com/privkey.pem; # được quản lý bởi Certbot
    bao gồm /etc/letsencrypt/options-ssl-nginx.conf; # được quản lý bởi Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # được quản lý bởi Certbot

}
người phục vụ {

    nếu ($host = a1.example.com) {

    trả lại 301 https://$host$request_uri;
   }
     nghe 80;
     nghe [::]:80;
     server_name a1.example.com www.a1.example.com;
    trả lại 404; # được quản lý bởi Certbot

}

Điều này chuyển hướng từ http sang https, nhưng tôi không thể thực hiện chuyển hướng www sang nonwww

Bản ghi dns hiện tại của tôi là

IP @
IP a1
tên miền www CNAME
CNAME www.a1 www.a1.domain
Ivan Shatsky avatar
lá cờ gr
Xin lưu ý rằng tôi đã bỏ lỡ câu hỏi đăng nhập trong regex (`^(?:www\.)a1\.example\.com$` thay vì `^(?:www\.)?a1\.example\.com$` ). Tôi đã sửa câu trả lời rồi.
Điểm:1
lá cờ gr

Tôi nghĩ câu trả lời hay nhất về chủ đề này được đưa ra bởi @MichaelHampton đây. Để khắc phục nhanh, bạn có thể thêm

nếu ($host = www.a1.example.com) {
    trả về 301 https://a1.example.com$request_uri;
}

vào khối máy chủ HTTPS của bạn và thay đổi nếu ($host = a1.example.com) { ... } trong khối máy chủ HTTP để

if ($host ~ ^(?:www\.)?a1\.example\.com$) {
    trả về 301 https://a1.example.com$request_uri;
}

Dù sao thì tôi hoàn toàn đồng ý với Michael Hampton rằng bạn không nên cho phép certbot thay đổi cấu hình nginx của mình và chỉ sử dụng nó để nhận/gia hạn chứng chỉ (xem câu trả lời của anh ấy để biết ví dụ về cấu hình nginx được viết tốt).

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.