cloudflare의 Flexible ssl을 사용하여 루프 리디렉션

CloudFlare에서 제공하는 Flexible SSL을 내 사이트에 구현하려고합니다.

내 nginx 설정은 다음과 같습니다.

# 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...)

그러나 웹 사이트 (WordPress)에 연결하려고하면 리디렉션 루프 (크롬 : ERR_TOO_MANY_REDIRECTS)가 나타납니다. 이를 방지하기 위해 nginx를 어떻게 구성합니까?



답변

Cloudflare의 유연한 SSL 은 cloudflare와 서버 간의 연결이 항상 http를 통해 이루어짐을 의미합니다 .

이것이 주어지면 관련성에 관한 유일한 서버 블록은 다음과 같습니다.

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

리디렉션 루프가 발생하는 이유는 분명합니다. 유연한 ssl 솔루션을 사용하여 https 연결을 강제로 적용하는 두 가지 솔루션이 있습니다.

Cloudflare의 페이지 규칙 사용

cloudflare를 통해서만 서버에 액세스하는 경우 cloudflare의 자체 페이지 규칙 을 사용 하여 도메인, 하위 도메인 또는 URL 패턴에 대한 응답을 수정할 수 있습니다 .

옵션 중 하나는 https를 강제하는 것입니다.

테스트 $http_x_forwarded_proto

페이지 규칙 사용을 피하고 싶을 수도있는 경우가 있습니다 (드물거나 일시적 임). 이러한 시나리오의 경우 전달 된 프로토콜을 테스트하고이를 기반으로 리디렉션 할 수 있습니다.

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
}

답변

유효한 SSL 인증서가있는 경우 문제를 해결할 수 있습니다. [Crypto] 상자 Full (strict)에서 이미지 와 같이 선택하십시오 .

Nginx를위한 웹 서버 설정 파일을 업데이트 할 필요가 없습니다.


답변

AD7six의 대답은 매우 훌륭하지만 페이지 규칙이 필요없는 더 간단한 솔루션이있는 것으로 보입니다. 이것이 이전 답변 이후 새로운 추가 사항인지 확실하지 않지만 특히 작성 시점에 Cloudflare를 사용하여 3 개의 무료 페이지 규칙을 얻는다는 점을 감안할 때이 질문에 분명히 문서화해야합니다.

특정 도메인에 대해 유연한 SSL을 Crypto설정 한 경우 탭에서 아래로 스크롤 하여 Always use HTTPS옵션을 활성화 할 수 있습니다. 이 옵션은 리디렉션 루프 문제를 완벽하게 해결합니다 ( AD7six의 답변에 자세히 설명되어 있음 ).

이 옵션은 nginx와 함께 작동하는 것으로 확인되었습니다. 또한 Flexible SSL이 이미 활성화되어 있고 문제없이 작동하는 경우이 옵션이 작동하지 않는 서버 설정이 없어야합니다.