2010-08-13 4 views
1

내 사이트에 SSL 지원을 추가 한 후 무한 리디렉션 루프가 발생합니다. "SslRequirement"플러그인을 사용하고 있습니다.nginx + SslRequirement + mongrel cluster = 무한 리디렉션 루프

"ssl_required"가 활성화 된 모든 동작과 앞에서 https가있는 수동으로 입력 한 모든 URL은 development.log 파일에서 다음과 같이 무한 루프로 진행됩니다 , 반복 브라우저 리디렉션 루프를 포착 할 때까지 페이지의 로딩이 중지 ("/ 관리자/인덱스는"이 예에서는 작업이지만, 어떤 조치 일) :

Processing AdminsController#index (for 127.0.0.1 at 2010-08-13 13:50:16) [GET] 
    Parameters: {"action"=>"index", "controller"=>"admins"} 
Redirected to https://localhost/admins 
Filter chain halted as [:ensure_proper_protocol] rendered_or_redirected. 
Completed in 0ms (DB: 0) | 302 Found [http://localhost/admins] 

첫번째 I에서 내가 모든 행동을 "ssl_allowed"로 만들어야 만하는 문제가 있다고 생각했기 때문에 그것을 시도했지만 아무 소용이 없었습니다.

SslRequirement 사용을 제거하고 "ssl_required/ssl_allowed"참조를 제거하면 https가 정상적으로 작동하므로 http에서 https 로의 리디렉션이 문제가 될 수 있습니다.

실마리가 있습니까?

답변

2

대답은 여기에서 찾을 :

http://www.hostingrails.com/SSL-Redirecting-not-working

짧은 버전입니다, 내의 nginx의 설정에서 SSL 가상 호스트에 다음 줄을 추가 :

proxy_set_header X_FORWARDED_PROTO HTTPS;


자세한 버전은 다음과 같습니다

은 기본적으로 문제는 소스 요청이 잡종 클러스터에 HTTPS 프로토콜이 있다는 사실을 전달하지 nginx를 서버로 내려왔다. 이로 인해 "request.ssl?"호출이 발생했습니다. SslRequirement 플러그인 내부에서는 항상 false를 반환합니다.

따라서 이것이 false로 반환되면 "ensure_proper_protocol"은 https를 통해 조치를 다시 발행하고 "request.ssl?"을 확인하여 "false"를 반환하여 조치를 다시 발행합니다 "request.ssl?"을 검사하는 https는 https를 통해 조치를 다시 발행하는 "false"를 리턴하고 "request.ssl?"을 점검하여 "false"를 리턴하며 이는 " "request.ssl?"을 확인하는 "https"를 통해 조치를 발행하면 "false"를 반환하여 https를 통해 조치를 다시 발행합니다.

... 아이디어가 있습니다. mongrel 클러스터는 요청이 HTTPS 프로토콜을 통해 이루어진 것으로 생각하지 않았으므로 영원히 리디렉션되었습니다. 이 문제를 해결하기위한 nginx 설정의 작은 변화와 BAM-O : 문제가 해결되었습니다.