Chuyển hướng vòng lặp bằng cách sử dụng ssl linh hoạt của cloudflare


10

Tôi đang cố gắng triển khai SSL linh hoạt do CloudFlare cung cấp cho trang web của mình.

Đây là cấu hình nginx của tôi:

# PHP-FPM upstream; change it accordingly to your local config!
upstream php-fpm {
    server 127.0.0.1:9000;
}

server {
    listen         80;
    server_name    example.com www.example.com;
    return         301 https://$server_name$request_uri;
}

server {
    ## Listen ports
    listen 443;

    # use _ if you want to accept everything, or replace _ with domain
    server_name example.com www.example.com;

    location / {
      #proxy_set_header        X-Forwarded-Proto $scheme;
      proxy_set_header X_FORWARDED_PROTO https;
      proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header  Host $http_host;
      proxy_set_header  X-Url-Scheme $scheme;
      proxy_redirect    off;
      proxy_max_temp_file_size 0;
    }

(...rest of config...)

Tuy nhiên, khi tôi cố gắng kết nối với trang web (Wordpress), tôi nhận được một vòng lặp chuyển hướng (chrome: ERR_TOO_MANY_REDIRECTS). Làm cách nào để định cấu hình nginx để ngăn chặn điều này?

Câu trả lời:


30

Ssl linh hoạt của Cloudflare có nghĩa là kết nối giữa cloudflare và máy chủ của bạn luôn ở trạng thái http:

kết nối luôn là http

Với điều này - khối máy chủ duy nhất trong câu hỏi liên quan là cái này:

server {
   listen         80;
   server_name    example.com www.example.com;
   return         301 https://$server_name$request_uri;
}

Rõ ràng là tại sao điều đó dẫn đến một vòng lặp chuyển hướng, có 2 giải pháp để buộc các kết nối https sử dụng giải pháp ssl linh hoạt của chúng.

Sử dụng quy tắc trang của Cloudflare

Nếu quyền truy cập vào máy chủ chỉ thông qua cloudflare, bạn có thể sử dụng quy tắc trang riêng của cloudflare để sửa đổi phản hồi cho tên miền, tên miền phụ hoặc bất kỳ mẫu url nào:

Sử dụng quy tắc trang của cloudflare

Một trong các tùy chọn là bắt buộc https:

Luôn sử dụng HTTPS

Kiểm tra $http_x_forwarded_proto

Đôi khi bạn có thể muốn tránh sử dụng quy tắc trang (chỉ nên hiếm hoặc chuyển tiếp), đối với những trường hợp này, có thể kiểm tra giao thức được chuyển tiếp và chuyển hướng dựa trên đó:

server {
   listen         80;
   server_name    example.com www.example.com;

   if ($http_x_forwarded_proto = "http") {
     return 301 https://$server_name$request_uri;
   }

   ... directives to generate a response
}

Và sẽ có lỗi trong các kết nối https của tôi như không phải mọi thứ đều được truyền qua http trong trường hợp này?
Deqq

Cách bạn thiết lập cloudflare / nginx không ảnh hưởng đến điều đó, nội dung html sẽ xác định xem có lỗi nào được báo cáo hay không.
AD7six

Dòng đầu tiên của câu trả lời này là không chính xác: kết nối giữa trình duyệt và CloudFlare được mã hóa TLS, kết nối từ CloudFlare đến máy chủ gốc là http. Các vòng lặp chuyển hướng có thể được gây ra bởi các quy tắc trang hoặc cài đặt cấp cao chỉ định loại mã hóa không chính xác - ví dụ đầy đủ khi bạn thực sự cần linh hoạt.
Tim

Ngoài ra còn có một plugin giúp với điều này: en-nz.wordpress.org/plugins/cloudflare-flexible-ssl
Tim

5

Điều này có thể khắc phục sự cố nếu bạn có chứng chỉ SSL hợp lệ trên. [Crypto] hộp và chọn Full (strict)như trong hình ảnh. nhập mô tả hình ảnh ở đây

Thực sự không cần cập nhật tệp cấu hình máy chủ web cho Nginx.


Đầy đủ (nghiêm ngặt) chỉ hoạt động nếu máy chủ web gốc có chứng chỉ SSL hợp lệ với chuỗi chứng chỉ hợp lệ. Đầy đủ hoạt động với bất kỳ chứng chỉ SSL, bao gồm cả tự ký. Đây không phải là một câu trả lời tốt cho câu hỏi.
Tim

Vâng, tôi thấy bây giờ, câu hỏi đề cập đến chứng chỉ Linh hoạt. Tôi sẽ cải thiện câu trả lời của tôi nhờ vào phản hồi của bạn và tôi sẽ cụ thể hơn. Chúng tôi đang cải thiện nền tảng kiến ​​thức ở đây. Chứng chỉ SSL hợp lệ có giá trị tốt nhất cho Google nếu chúng tôi xem xét quan điểm SEO. Tôi không hối hận sau khi đăng bài này.
prosti

Linh hoạt / đầy đủ / nghiêm ngặt không có sự khác biệt đối với SEO, cài đặt đó là để kết nối với máy chủ gốc. Cloudflare trình bày chứng chỉ https được chia sẻ cho bất kỳ ai yêu cầu trang, cách nó kết nối với nguồn gốc phần lớn không liên quan.
Tim

Giả sử máy chủ không có một cert SSL hợp lệ (OP không xác định, và tôi đến đây qua một google cấu hình tương tự), đây là một lựa chọn tuyệt vời - lưu ý nó cũng có thể được scoped đến tên miền phụ cụ thể thông qua Quy tắc trang.
skoczen

Đây là một câu trả lời siêu tốt cho tôi đã có SSL hợp lệ.
Philip

0

Câu trả lời của AD7six rất hay, mặc dù có vẻ như có một giải pháp đơn giản hơn không yêu cầu quy tắc trang. Tôi không chắc đây có phải là một bổ sung mới kể từ các câu trả lời trước hay không, nhưng chắc chắn nó phải được ghi lại trong câu hỏi này, đặc biệt là bạn chỉ nhận được 3 quy tắc trang miễn phí với Cloudflare tại thời điểm viết.

Khi bạn bật SSL linh hoạt cho một tên miền nhất định, bạn có thể cuộn xuống trên Cryptotab và bật Always use HTTPStùy chọn. Tùy chọn này sẽ giải quyết liền mạch vấn đề vòng lặp chuyển hướng (được giải thích kỹ trong câu trả lời của AD7six ).

Tùy chọn "Luôn sử dụng HTTPS" của Cloudflare

Tùy chọn này được xác nhận làm việc với nginx; hơn nữa, không nên có bất kỳ thiết lập máy chủ nào khi tùy chọn này không hoạt động, miễn là SSL linh hoạt đã được bật và hoạt động mà không gặp sự cố.


Nếu ui của Cloudflare đã thay đổi (hoặc các tùy chọn mới đã được cung cấp), tốt hơn là nên chỉnh sửa câu trả lời hiện có thay vì tạo một câu trả lời cạnh tranh.
AD7six

@ AD7six Tôi tin rằng đây là một bổ sung cho giao diện người dùng cũ, không phải là sự thay thế, có nghĩa là câu trả lời cũ vẫn còn hiệu lực. Do đó, một câu trả lời riêng biệt sẽ hợp lý hơn so với chỉnh sửa bản gốc, phải không?
Chad

Tôi không nghĩ rằng "Bạn đã từng phải làm điều này trong chặng đường dài, nhưng bây giờ có một nút cho nó!" là một câu trả lời mới, không :).
AD7six
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.