ホームページ >バックエンド開発 >PHPチュートリアル >nginx での proxy_pass から tomcat へのセッション損失の問題を解決する
はじめに
私は常に nginx1.5.7 を Web サーバーおよびプロキシ サーバーとして使用してきました。1 つのアプリケーションは常に 1 つの Tomcat (1 つのポート、1 つのドメイン名のみ) に対応します。
今日、サーバー上に Tomcat を統合し、5 つのアプリケーションが 1 つの 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>
この設定により、Cookie の保存場所が「/」に基づいていないため、2 回目の訪問時にセッションが再作成され、セッション内の情報が失われます。
解決策
Cookieの保存パスを変更してください
<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 チュートリアルに興味のある友人に役立つことを願っています。