Nginx セッション共有問題の解決策の分析

Nginx セッション共有問題の解決策の分析

この記事は主に、Nginx セッション共有の問題に対する解決策を紹介します。記事内のサンプル コードは非常に詳細で、皆さんの学習や仕事に一定の参考値があります。困っている友人は参考にしてください。

Nginx はセッション共有の問題を解決します:

1. nginx または haproxy による負荷分散。nginx による負荷分散の場合は、ip_hash 構成を追加できます。haproxy による負荷分散の場合は、balance source 構成を使用して、1 つの IP を使用するリクエストが同じサーバーに送信されるようにできます。

2. データベースを使用してセッションを同期します。

3. セッション データを同期するために Cookie を使用しますが、セキュリティが不十分であり、HTTP リクエストでパラメータを送信する必要があるため、帯域幅の消費量が増加します。

4.Tomcat はセッション共有を構成します。

5. セッション クラスターを使用して Redis を保存します。

1: プロジェクトを作成し、2つのTomcatを起動する

2: サーブレットテストを書く

パッケージ com.zn.servlet;

javax.servlet.ServletException をインポートします。
javax.servlet.annotation.WebServlet をインポートします。
javax.servlet.http.HttpServlet をインポートします。
javax.servlet.http.HttpServletRequest をインポートします。
javax.servlet.http.HttpServletResponse をインポートします。
java.io.IOException をインポートします。

@WebServlet("/nginxSessionServlet")
パブリッククラス SessionIPServlet は HttpServlet を拡張します {
  保護された void doPost(HttpServletRequest リクエスト、HttpServletResponse レスポンス) は ServletException、IOException をスローします {
    System.out.println("現在のリクエストポート: "+request.getLocalPort());
    文字列アクション = request.getParameter("action");
    //セッションにデータを保存する if(action.equals("setSession")){
      request.getSession().setAttribute("ユーザー名","zhangsan");
    }それ以外の場合、(action.equals("getSession")){
      response.getWriter().write((String)request.getSession().getAttribute("ユーザー名"));
    }
  }

  protected void doGet(HttpServletRequest リクエスト、HttpServletResponse レスポンス) は ServletException、IOException をスローします {
    doPost(リクエスト、レスポンス);
  }
}

3. Nginxを使わずにエフェクトを表示する

それぞれ8080と8081にアクセスします

4. nginx.confファイルを設定する

アップストリーム myserver{
     ip_ハッシュ;
     サーバー 127.0.0.1:8080;
     サーバー 127.0.0.1:8081;
  }
  サーバ{
    聞く 81;
    サーバー名 www.bproject.com;
    位置 / {
      ルートhtml;
      proxy_pass http://myserver;
      インデックス index.html index.htm;
    }
  }

5. 再度訪問する

方法2: spring-session+Redisを使用してセッション共有を実装する

1: 依存関係をインポートする

<!--Spring Boot および Redis アプリケーションの基本環境設定-->
    <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-redis -->
    <依存関係>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-redis</artifactId>
    </依存関係>

    <!--Spring セッションと Redis アプリケーションの基本環境設定。使用する前に Redis を有効にする必要があります。そうしないと、Spring ブートの起動時にエラーが発生します -->
    <依存関係>
      <groupId>org.springframework.session</groupId>
      <artifactId>spring-session-data-redis</artifactId>
    </依存関係>

2: コントローラーテストを作成する

@レストコントローラ
パブリッククラス SessionController {

  @RequestMapping("/setSession")
  パブリック文字列setSession(HttpServletResponseレスポンス、HttpServletRequestリクエスト)はIOExceptionをスローします{
    リクエスト.getSession().setAttribute("ユーザー名","wang");
    「成功」を返します。
  }

  @RequestMapping("/getSession")
  パブリック文字列 getSession(HttpServletRequest リクエスト、HttpServletResponse レスポンス){
    文字列ユーザー名 = (文字列) request.getSession().getAttribute("username");
    ユーザー名を返します。
  }
}

3: application.properties ファイル

サーバーポート=8082
#サーバーポート=8083

#redis 構成 spring.redis.password: wang2003

4: プロジェクトのテストを開始する

結論: このソリューションは構成が簡単で、データは安全かつ安定しており、効率的で、広く使用されています。

注: Redis でこのデータ パケットを削除すると、ポート 8082 および 8083 でセッションを取得できなくなります。これは、セッションが JVM に存在せず、Redis に転送されることを意味します。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Nginx リバース プロキシでセッション永続性を実装する 2 つの方法の詳細な説明
  • Nginx+Tomcat によるセッション管理の実装
  • nginx+redisはセッション共有を実現します
  • nginx+tomcatは負荷分散を実装し、redisセッション共有を使用します
  • Nginxでの共有セッション設定方法の例
  • Nginx 負荷分散マルチサイト共有セッション
  • nginxワーカープロセスループの実装
  • Nginxポーリングアルゴリズムの基本的な実装方法の詳細な説明
  • NginxはURLのパスに応じてアップストリームに動的に転送します
  • PythonベースのWeb環境を構築するためのnginxの実装手順

<<:  MySQL マルチバージョン同時実行制御 MVCC の実装

>>:  Vue-cliフレームワークはタイマーアプリケーションを実装します

推薦する

VMware 仮想マシンの 3 つの接続方法の例の分析

NATこのようにして、仮想マシンのネットワーク カードはホストの VMnet8 に接続されます。この...

iframe 適応サイズ実装コード

ページドメインの関係:メインページ a.html はドメイン A: www.jb51.net に属し...

CentOS7 は yum を使用して mysql 8.0.12 をインストールします

この記事では、centos7にyumを使用してMySQL 8.0.12をインストールする詳細な手順を...

React で遅延読み込みを使用して最初の画面の読み込み時間を短縮する方法

目次使用インストールルーティングでどのように使用しますか?読み込み速度の比較最近、中間およびバックエ...

フレックスレイアウトによるシームレスなスクロールのサンプルコード

この記事では、シームレスなスクロールを実現するためのフレックスレイアウトのサンプルコードを主に紹介し...

Sysbench の MySQL ベンチマーク プロセスの分析

序文1.ベンチマークは、テスト オブジェクトのクラスの特定のパフォーマンス指標の定量的、再現可能、比...

DockerでGPUを使用するプロセスの詳細な説明

目次tf-gpu をダウンロード取得したtf-gpuイメージに基づいて独自のイメージを構築するイメー...

jQuery はシャッター効果を実現します (li 配置を使用)

この記事では、ブラインド効果を実現するためのjQueryの具体的なコードを参考までに紹介します。具体...

Linux ファイルシステムの説明: ext4 以降

今日は、ext3 や他の以前のファイル システムとの違いを含め、ext4 の歴史について説明します。...

jQueryは時間セレクタを実装する

この記事の例では、参考までに時間セレクターを実装するためのjQueryの具体的なコードを共有していま...

Avue でカスタム検索バーを実装し、検索イベントをクリアする実践

目次1. 検索バーの内容をカスタマイズする2. 検索ボタンをカスタマイズする検索バーをカスタマイズし...

HTML Web ページにおける URL の表現

HTML では、一般的な URL はさまざまな方法で表現されます。相対 URL:コードをコピーコード...

Nginx 正規表現関連のパラメータとルールの紹介

序文最近、私はクライアントのサーバー構成を支援しており、Nginx 構成ファイルを頻繁に変更していま...

Dockerコアとインストールの具体的な使い方

1. Docker とは何ですか? (1)DockerはLinuxコンテナ内でアプリケーションを実行...