2010-11-24 2 views
6

그래서 nginx-http-push-module과 PHP-FPM을 사용하여 nginx를 사용하는 응용 프로그램을 설계하고 있습니다. 재미있게 구성한 후에 PHP 페이지를 처리해야합니다.세션/인증이 nginx/NHPM/PHP-FPM과 어떻게 작동합니까?

비록 내가 얻지 못하는 것은 세션이 작동하는 방식입니다. nginx + NHPM에서 본 모든 예제는 게시자 - 구독자 시스템을 통해 실행되지만, 가입자 채널은 실질적으로 가입자에게 고유 할 것입니다. 예를 들어 각 사용자에 대해 공개 채널과 비공개 채널이있는 채팅 시스템을 생각해보십시오.

이제는 기존 PHP 설정에서 쿠키를 PHP로 전달하고 거기에서 세션을 찾고 사용자가 인증되었는지 여부에 따라 나머지 페이지를 처리하지만 PHP- FPM과 long-polling이 그렇게 작동해야하는 것처럼 보이지 않습니다.

요청이 인증되지 않은 사용자인지 이해할 수 있습니다. 오류 메시지와 함께 오류 메시지를 덤프하고 유효하지 않은 것으로 알고있는 클라이언트의 긴 폴을 종료하지만 유효한 요청으로 폴링해야합니다. 클라이언트에서 PHP로 인증 한 다음 연결을 끊지 만 요청을 열어두면 어떻게 작동하는지 모르겠습니다.

가능한 경우 예제를 사용하여 달성 방법을 설명 할 수 있습니까? 내가 이 아니라 여기에서 HTTP 기본 인증을 찾고있다. 나는 인증을 MongoDB에있는 별도의 데이터 저장소에 대해 조회해야한다.

답변

2

면책 조항 : 귀하의 4. 단락을 명확하게 이해할 수 없습니다.

내가 알 수있는 한 NHPM 인증의 주된 문제는 PHP 응용 프로그램이 들어오는 연결에 대한 알림을 전혀받지 않는다는 것입니다. 설정의 Comet 부분은 PHP 용 쓰기 전용입니다.

가능한 해결책은 다음에 나올 것입니다.

의 nginx 구성 :

  • push_subscriber_concurrency 첫째 : 채널 만 push_authorized_channels_only에 의도 된 사용자
  • 에서 사용할 수 있도록 : 꼭 필요하지만 좋지 않아 내 의견에 가지고

인증 워크 플로 :

  1. 클라이언트가 구식 요청을 통해 자격 증명을 전송합니다.
  2. 서버가 인증하고 토큰 (채널 ID)을 생성합니다. 채널을 생성하고 토큰으로 응답합니다.
  3. 클라이언트가 주어진 채널로 긴 폴링을 시도합니다.
    • 실패한 경우 (채널이 도용 당했을 수 있기 때문일 수 있음) 서버에 채널이 잘못되었음을 알려줍니다. 여기에서는 구식 요청을 사용하므로 모든 인증 방법을 사용할 수 있습니다. 서버가 채널을 삭제합니다. 2 단계로 돌아갑니다.
    • 연결이 성공하면 (이 사실을 알지 못하고 실패하지 않은 것만 알 수 있음) 채널이 인증 된 것으로 간주 될 수 있습니다.응용 프로그램이 동일한 로그인과 같은 브라우저에서 여러 페이지에서 액세스 할 수 있어야하는 경우, 당신은 사용자 당 여러 채널을 준비해야한다는 점

참고.

+0

네, 제가 추측하고있는 것을 확인했다고 생각합니다. 나는 여전히 기존의 쿠키를 사용하여 각각의 긴 여론 조사에서 인증을 시도 할 것이라고 생각하고 있으며 각 요청에 대해 인증을하고 잘못된 인증에 대한 오류 페이지에 실패하는 PHP의 일반적인 상황을 생각하고있었습니다. 그렇지 않으면 페이지를 정상적으로 출력 할 수 있습니다. 하지만 NHPM에서는 응답을 그렇게 출력하지 않으므로 PHP-FPM으로 어떻게 인증하는지 궁금해했습니다. – Arantor