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


11

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를 어떻게 구성합니까?

답변:


31

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

연결은 항상 http입니다

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

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

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

Cloudflare의 페이지 규칙 사용

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

cloudflare의 페이지 규칙 사용

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

항상 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
}

그리고이 경우 모든 것이 http를 통해 전송되지 않는 것과 같은 https 연결에 오류가 있습니까?
Deqq December

cloudflare / nginx를 설정하는 방법은 그것에 관련이 없으며 html 내용 은 그러한 오류가보고되는지 여부를 결정합니다.
AD7six

이 답변의 첫 번째 줄은 올바르지 않습니다. 브라우저와 CloudFlare 간의 연결은 TLS 암호화이며 CloudFlare에서 오리진 서버로의 연결은 http입니다. 리디렉션 규칙은 암호화 규칙을 잘못 지정하는 페이지 규칙 또는 높은 수준의 설정으로 인해 발생할 수 있습니다 (예 : 실제로 유연성이 필요한 경우 전체).
Tim

이를 도와주는 플러그인도 있습니다 : en-nz.wordpress.org/plugins/cloudflare-flexible-ssl
Tim

6

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

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


전체 (엄격)는 원본 웹 서버에 유효한 인증서 체인이있는 유효한 SSL 인증서가있는 경우에만 작동합니다. 자체 서명을 포함한 모든 SSL 인증서와 완벽하게 작동합니다. 이것은 질문에 대한 좋은 대답이 아닙니다.
Tim

예, 이제 질문에 탄력적 인증서가 언급되어 있습니다. 귀하의 의견에 따라 답변을 개선 할 것이며보다 구체적으로 설명하겠습니다. 여기에서 지식 기반을 개선하고 있습니다. SEO 관점을 고려하면 유효한 SSL 인증서가 Google에 가장 적합합니다. 이것을 게시 한 후회하지 않습니다.
prosti

융통성 / 전체 / 엄격은 SEO와 아무런 차이가 없습니다.이 설정은 원본 서버에 대한 연결입니다. Cloudflare는 페이지를 요청하는 모든 사람에게 공유 https 인증서를 제공하며, 원본에 연결하는 방법은 크게 관련이 없습니다.
Tim

서버 에 유효한 SSL 인증서 있다고 가정하면 (OP가 지정하지 않고 비슷한 구성 Google을 통해 여기에 왔음) 훌륭한 옵션입니다. 페이지 규칙을 통해 특정 하위 도메인으로 범위를 지정할 수도 있습니다.
skoczen

이것은 유효한 SSL을 가진 저에게 좋은 대답입니다.
필립

0

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

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

Cloudflare의 "항상 HTTPS 사용"옵션

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


Cloudflare의 UI가 변경되었거나 새로운 옵션을 사용할 수있는 경우 경쟁 답변을 작성하는 대신 기존 답변을 편집하는 것이 좋습니다.
AD7six

@ AD7six 나는 이것이 이전 UI에 대한 추가이며 교체가 아니라고 생각합니다. 즉, 이전 답변은 여전히 ​​유효해야합니다. 따라서 별도의 답변이 원본을 편집하는 것보다 더 논리적 일 것입니다. 그렇지 않습니까?
Chad

나는 "먼저이 일을해야했지만 지금은 버튼이 있습니다!"라고 생각하지 않습니다. 새로운 답변입니다 :).
AD7six
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.