동일한 브라우저에서 여러 세션을 사용하는 역방향 프록시

동일한 브라우저에서 여러 세션을 사용하는 역방향 프록시

내 역방향 프록시는 대부분 작동하는 것 같지만 동일한 브라우저 내에서 다른 백엔드 서버에 대한 세션을 열면 브라우저에서 다음 메시지가 표시됩니다(Chrome 및 IE로 테스트).

Already a session is running in this browser, so opening the same session

두 번째 세션을 열면 두 세션이 간섭하여 그중 하나가 로그아웃됩니다.

두 가지 요청 URL은 다음과 같습니다.

https://proxy-server/backend1/index.html
https://proxy-server/backend2/index.html

역방향 프록시는 이러한 요청을 다음에 매핑합니다.

https://backend1:1234/index.html  and
https://backend2:1234/index.html

쿠키와 관련이 있는 것 같은데요? 그래서 나는 그것들을 비교했고 각각은 고유한 쿠키 내용을 가지고 있습니다. 예:

Session to backend1:
  QSESSIONID: c1f9468714084ee2fePE6l5x3FqyPl

Session to backend2:
  QSESSIONID: 06b2468a5a0509eb1aWoJRH8TpslxC

이러한 세션이 서로 간섭하지 않도록 하려면 리버스 프록시에서 무엇을 구성해야 합니까?

고마워요,
매트.

답변1

내 질문에 답하기... 바로 답을 얻으려면 ProxyPassReverseCookiePath내 항목에 다음을 추가해야 했습니다 <VirtualHost>.

<Location "/backend1">
  ...
  ProxyPass https://backend1:1234/
  ProxyPassReverse https://backend1:1234/
  ...
  ProxyPassReverseCookiePath / /backend1
  ...
</Location>

추가해야 할 항목을 찾으려면 Set-Cookie백엔드 서버와 프록시 서버에서 헤더를 추적해야 했습니다.

백엔드에서는 lighttpd를 사용하고 있습니다. 백엔드 요청/응답을 추적하려면 다음 안내를 따르세요.

server.modules += ("mod_accesslog")
accesslog.use-syslog = "enable"
accesslog.syslog-level = 6
accesslog.format = "%h %l %u %t \"%r\" \"C:%{Cookie}i\" \"S-C:%{Set-Cookie}o\" %>s %b"

Reverse-Proxy가 Apache를 실행하고 있으므로 이것을 내 파일에 추가했습니다 <VirtualHost>.

LogFormat "%h %l %u %t \"%r\" \"C:%{Cookie}i\" \"S-C:%{Set-Cookie}o\" %>s %b"
TransferLog "/store/log/httpd_access_log"

이제 로깅 세부정보가 준비되어 무슨 일이 일어나고 있는지 알 수 있었습니다...

초기 로그인 화면 이후 세션이 설정되고 백엔드 서버는 쿠키 콘텐츠를 생성하여 헤더에 추가합니다 Set-Cookie. 내가 필요 Set-Cookie로 했던 단서는 그것이 Path=/. 서로 간섭하는 서로 다른 백엔드 서버의 세션을 중지하려면 Path백엔드 서버 이름에 종속되는 속성을 만들어야 했습니다 . 그것이 ProxyPassReverseCookiePath나를 위해 하는 일입니다.

프록시는 Set-Cookie헤더를 보고 속성을 매핑합니다 Path.

lighttpd에 표시된 로그는 다음과 같습니다(보기의 즐거움을 위해 편집됨).

"POST /api/session HTTP/1.1" "C:i18next=en-us" "S-C:SID=3bmx; path=/; secure"

그리고 이 응답이 프록시를 통과한 후 지시문에 의해 다음 ProxyPassReverseCookiePath과 같이 수정됩니다.

POST /backend1/api/session HTTP/1.1 C:i18next=en-us S-C:SID=3bmx; path=/backend1;secure

이제 쿠키 경로는 백엔드 서버의 이름에 따라 달라집니다.

매트.

관련 정보