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이 이미 활성화되어 있고 문제없이 작동하는 경우이 옵션이 작동하지 않는 서버 설정이 없어야합니다.