Điểm:0

Tránh trùng lặp trong cấu hình chuyển hướng nginx?

lá cờ sy

Thiết lập chuyển hướng www â không có wwwHTTP â HTTPS đồng thời, tôi gặp phải sự cố trùng lặp mà tôi không khắc phục được.

Trên miền của tôi—hãy để nó như vậy ví dụ.comâTôi có một trang web với tên chính khác.example.com. Tôi muốn các yêu cầu để ví dụ.com, www.example.com, và www.another.example.com được chuyển hướng đến khác.example.comvà tất cả các yêu cầu HTTP sẽ được chuyển hướng đến HTTPS cùng một lúc; Tôi cũng muốn hỗ trợ HTTP/2 và IPv6.

Tôi không gặp vấn đề gì với việc làm cho nó hoạt động, nhưng tôi không loại bỏ được việc sao chép một phần quan trọng của tệp cấu hình (cụ thể là cài đặt chứng chỉ HTTPS). Mọi cố gắng giảm trùng lặp đều khiến một hoặc nhiều hoặc tất cả chuyển hướng ngừng hoạt động (đôi khi cùng với HTTP/2).

Vui lòng xem cấu hình và đề xuất cách dọn dẹp:

người phục vụ {
    nghe 80;
    nghe [::]:80;
    server_name www.another.example.com www.example.com other.example.com example.com;
    trả lại 301 https://another.example.com$request_uri;
}

người phục vụ {
    nghe 443;
    nghe [::]:443;
    server_name www.another.example.com www.example.com example.com;
    trả lại 301 https://another.example.com$request_uri;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    bao gồm /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

người phục vụ {
    server_name other.example.com;
    gốc /usr/share/nginx/another.example.com;
    chỉ số index.html;

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

    nghe [::]:443 ssl http2;
    nghe 443 ssl http2;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    bao gồm /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
Richard Smith avatar
lá cờ jp
Xem [ví dụ này](https://stackoverflow.com/questions/43081780/dns-records-redirect-www-to-non-www/43089681#43089681) trên SO.
gxx avatar
lá cờ gb
gxx
Ngoài ra, hãy di chuyển các cài đặt chung vào một cấu hình chuyên dụng và dựa vào `bao gồm`.
lá cờ sy
@RichardSmith sau khi di chuyển bốn chuỗi trùng lặp sang khối bên ngoài (và xóa chúng ở cả hai khối bên trong), tôi gặp lỗi cấu hình: `nginx: [warn] giá trị trùng lặp "TLSv1.2" trong /etc/letsencrypt/options-ssl-nginx .conf:11 nginx: [cảnh báo] giá trị trùng lặp "TLSv1.3" trong /etc/letsencrypt/options-ssl-nginx.conf:11 nginx: [emerg] Chỉ thị "ssl_prefer_server_ciphers" bị trùng lặp trong /etc/letsencrypt/options-ssl-nginx.conf:12 nginx: kiểm tra tệp cấu hình /etc/nginx/nginx.conf không thành công`
Richard Smith avatar
lá cờ jp
Có vẻ như bạn có câu lệnh trùng lặp ở đâu đó. Sử dụng `nginx -T` (chữ hoa `T`) để xem toàn bộ cấu hình trên tất cả các tệp được bao gồm.
lá cờ sy
@RichardSmith vâng, bạn nói đúng. Nhưng sau khi tôi theo dõi sự trùng lặp, một vấn đề khác đã nảy sinh: thực sự có nhiều tên miền cấp cao nhất trong cấu hình nginx của tôi. Nếu tôi di chuyển cấu hình SSL từ khối máy chủ lên cấp cao nhất thì chỉ một miền (ví dụ: `example.com`) sẽ hoạt động.
Richard Smith avatar
lá cờ jp
Trong trường hợp đó, thiết lập ban đầu của bạn có thể là thiết lập tốt nhất bạn có thể đạt được. Nếu bạn có một số lượng lớn các câu lệnh trùng lặp, bạn có thể đặt chúng vào một tệp được bao gồm.
Điểm:0
lá cờ in
người phục vụ {
    server_name other.example.com;
    gốc /usr/share/nginx/another.example.com;
    chỉ số index.html;

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

    nghe [::]:443 ssl http2;
    nghe 443 ssl http2;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    bao gồm /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
người phục vụ {
    nghe 443 ssl;
    nghe [::]:443 ssl;
    server_name www.another.example.com www.example.com example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    bao gồm /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    viết lại ^/(.*)$ https://another.example.com/$1 vĩnh viễn;
}
người phục vụ {
    nghe 80;
    nghe [::]:80;
    server_name www.another.example.com www.example.com other.example.com example.com;
    địa điểm / {
        nếu ($host !~* ^(www)) {
          viết lại ^/(.*)$ https://another.example.com/$1 vĩnh viễn;
        }
    }
}

Đă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.