2012-03-22 2 views
3

SSL 암호화 된 페이지에서 암호화되지 않은 (https -> http) 스위치로 전환하려고하면 무한 리디렉션 루프가 발생합니다. 우리의 현재 구성은 헤더를 생성하는 부하 분산 장치 뒤에 설정 : 항상 "HTTP"를 반환 othwerise,이 "HTTPS"반환 SSL로 설정되어 HTTP_X_FORWARDED_PROTOSSL을 사용하는로드 밸런서 뒤에 PHP의 리디렉션 루프

I가 사용하는 데 사용

다음 코드 SSL 인증서 이전의 사이트가 사이트가 실행되는 웹 노드 대신로드 밸런서로 이동되었습니다. (HTTP_X_FORWARDED_PROTO)가 추가되어 그에 따라 스크립트를 업데이트합니다.

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])){ 
    $redirect = ''; 
    if (!isset($sslPage)){ 
     $sslPage = false; 
    } 
    switch($_SERVER['HTTP_X_FORWARDED_PROTO']){ 
     case 'http' : 
      if ($sslPage) 
       $redirect = 'location: https://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; 
      break; 

     case 'https' : 
      if (!$sslPage) 
       //$redirect = 'location: http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; 
      break; 
    } 
    if (!empty($redirect)){ 
     header ($redirect); 
    } 
} 

ssl이 켜져 있어야하는 각 페이지에는 $ sslPage = true의 사전로드 된 변수가 있습니다.

http에서 https 로의 리디렉션은 아무런 문제가 없습니다. 그러나 내가 뒤로 가려고하면 그것은 효과가 없습니다. 나는 무한 루프에 빠지다. 나는 그것이 아파치 때문이라고 생각하기 시작했다. 웹 노드는 더 이상 SSL을 종료하지 않으므로 포트 80을 통해 모든 트래픽이 실행됩니다. php가 header()를 통해 리다이렉션을 수행하면 서버가 로컬이므로 요청을 수집하고 구문 분석을 시도합니다. HTTP_X_FORWARDED_PROTO는로드 밸런서에 다시 도달하지 않았기 때문에 절대로 업데이트되지 않으므로 리디렉션이 결코 성공할 수 없습니다.

제 질문은 이것이 의미가 있거나 이것에 대한 생각을 잘못했다는 것입니다. 관계없이 항상이 호출을로드 밸런서로 다시 전달합니까? 해당 웹 노드에 내부적으로 머물러 있다면로드 밸런서로 되돌려 강제로 검색하여 검색하려는 페이지의 새 헤더를 작성할 수 있습니까? 사전에 도움이가 실망 것으로 입증되었습니다

....

감사합니다.

+0

차드, 해결책 찾았습니까? 나는 똑같은 문제로 어려움을 겪고있다. –

답변

6

당신은 아파치 SSL 이것은 기존 코드를 변경할 필요없이 작업 할 수 있도록한다 (PHP 로직 $_SERVER['HTTPS']에서) 환경 변수를 설정하여

SetEnvIf X-Forwarded-Proto https HTTPS=On 

에 생각 할 수 있습니다.

+1

다른 기존 앱을 지원해야하며 HTTPS를 확인하는 방식을 변경하여 업그레이드 가능성을 없애고 싶을 때 유용합니다. +1 – justbeez

2

우리는 방금 비슷한 것을 발견했으며 응답 헤더를 방해하는 것은 Zeus로드 밸런서임을 발견했습니다. 초기 요청이 https에서 이루어지고 반환이 비보안 페이지 인 경우로드 된 모든 301/302 헤더가로드 밸런서에 의해 수정되었음을 발견했습니다. 로드 밸런서 대신 예상의 (다시 전환했기 때문에 "예를 들어

, 클라이언트가 https://site.com을 요청하고 우리가 302 http://site.com로 리디렉션하는 경우는, 다시 클라이언트 단에서의 결과는"https://site.com위치 "것 위치 : http://site.com ")

이 문제는로드 균형 조정기에서 해제하여 해결되었습니다.

누군가를 돕는 희망 - 시도하고 바닥에 도달하는 것은 괴로운 문제입니다!