소개
저는 항상 nginx1.5.7을 웹 서버와 프록시 서버로 사용해 왔습니다. 하나의 애플리케이션은 항상 하나의 포트, 하나의 도메인 이름에 해당합니다.
오늘은 5개의 애플리케이션이 하나의 Tomcat을 공유하는 서버에 Tomcat을 통합했습니다.
가장 먼저 발생하는 문제는 사용자가 백그라운드 진입을 기다리면 예외가 발생하고, 로그인한 사용자 정보를 찾을 수 없다는 점입니다!
디버깅 후 요청 요청이 여러 개가 되었고 세션이 일치하지 않는 것으로 나타났습니다. 마치 다른 브라우저가 액세스하는 것 같았고 우리는 세션이 손실되어야 한다는 결론을 내렸습니다.
원인
신중한 분석 끝에 우리는 결론에 도달했습니다. 문제는 Nginx의 구성에 있습니다!
<code>server_name www<span>.</span>weixin4j<span>.</span>org; charset utf<span>-</span><span>8</span>; root /opt/apache<span>-tomcat</span><span>-</span><span>7.0</span><span>.53</span>/webapps/weixin4j<span>/</span>; location <span>/</span> { proxy_pass http:<span>//127.0.0.1:8180/weixin4j/;</span> proxy_set_header Host <span>$host</span>; proxy_set_header X<span>-Real</span><span>-IP</span><span>$remote_addr</span>; proxy_set_header X<span>-Forwarded</span><span>-For</span><span>$proxy_add_x_forwarded_for</span>; }</code>
이렇게 구성하면 쿠키 저장 위치가 "/" 기반이 아니므로 두 번째 방문 시 세션이 다시 생성되므로 세션에 있는 정보가 손실됩니다.
해결책
쿠키 저장 경로 수정
<code>server_name www<span>.</span>weixin4j<span>.</span>org; charset utf<span>-</span><span>8</span>; root /opt/apache<span>-tomcat</span><span>-</span><span>7.0</span><span>.53</span>/webapps/weixin4j<span>/</span>; location <span>/</span> { proxy_pass http:<span>//127.0.0.1:8180/weixin4j/;</span> proxy_set_header Host <span>$host</span>; proxy_set_header X<span>-Real</span><span>-IP</span><span>$remote_addr</span>; proxy_set_header X<span>-Forwarded</span><span>-For</span><span>$proxy_add_x_forwarded_for</span>; add_header From www<span>.</span>weixin4j<span>.</span>org; proxy_cookie_path /weixin4j<span>/</span><span>/</span>; proxy_set_header Cookie <span>$http_cookie</span>; }</code>
서비스를 재시작하고 테스트해보세요!
통과하다!
위의 내용을 포함하여 nginx에서 Proxy_pass에서 tomcat으로의 세션 손실 문제를 해결하는 방법을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되길 바랍니다.