ホームページ 運用・保守 Nginx nginx がロード バランシングとマルチサイト共有セッションを実装する方法

nginx がロード バランシングとマルチサイト共有セッションを実装する方法

May 17, 2023 am 08:31 AM
nginx session

複数のサイト間でセッションを共有する一般的な方法は次のとおりです。
•.net 自動状態サービス (asp.net 状態サービス) を使用する;
•.net セッション データベースを使用する;
•memcached を使用します。
•Cookie を使用して複数のサイト間で共有を実現します (この方法は、複数のサイトが同じドメイン名にある場合にのみ限定されます);
ここでは、セッションをデータベースの形式で保存してマルチサイトを実現する練習をします。 -サイト共有セッション。

まず、以下に示すようにサイトを構築します。

nginx がロード バランシングとマルチサイト共有セッションを実装する方法

default.aspx

nginx がロード バランシングとマルチサイト共有セッションを実装する方法

ボタンは 2 つあり、setsession は主にセッションに値を割り当てるために使用されます (例: session["sharevalue"] = "abcd")。

getsession は主にセッション値を取得するために使用されます。

具体的なコードは次のとおりです:

nginx がロード バランシングとマルチサイト共有セッションを実装する方法

コード部分はこれですべてです...

次のステップは、Web を構成することです。 .config. 実際、主なことは、machinekey と sessionstate の 2 つのノードをノード
に追加することです。
1. machinekey を追加する主な機能は次のとおりです:
"によるとmsdn の標準ステートメント: 「フォーム認証 Cookie データとビュー ステート データの暗号化と復号化、およびアウトプロセス セッション状態 ID の検証に使用されるように、キーを構成に追加します。 「つまり、フォーム認証 Cookie やビューステートの暗号化など、asp.net の多くの暗号化は machinekey の値に依存します。デフォルトでは、asp.net の構成は自動的に動的に生成されます。単一のサーバーでは問題ありませんが、複数のサーバーが負荷分散されている場合、マシンキーも動的に生成されます。各サーバーのマシンキーの値が一貫していないため、暗号化の結果が不一致になります。検証とビューステートは共有できないため、複数のサーバーの負荷分散ではこの場合、各サイトで同じマシンキーを構成する必要があります。」詳細については、他の情報を確認してください。
2. セッション状態を追加すると、主にセッションをデータベースに保存できるようになります。
具体的な構成は次のとおりです:

コードをコピーします コードは次のとおりです:


decryptionkey="9421e53e196bb56db11b9c25197a2ad470638efbc604ac74cd29dbbcf79d6046"
validation="sha1" decryption="aes"/>



ウェブサイト部分は問題ありません。 。 。以下はデータベースを構成する手順です...

データベース構成:
aspnet_regsql.exe ツールを使用する
asp.net バージョン 2.0 以降、Microsoft はセッションを簡単に構成するための aspnet_regsql.exe ツールを提供しています。このツールは、Web サーバーの "システム ルート ディレクトリ\microsoft.net\framework\versionnumber" フォルダーにあります。

使用例:

aspnet_regsql.exe -s . - u sa - p 123456 -ssadd -sstype p
-s パラメータ:
はデータベース インスタンス名を表します。「.」を使用してローカル マシンを表すことができます。
-u および -p パラメータ:
はユーザー名とパスワードを表します。
-e パラメータ:
-u –p と -e の間でグループを選択できます。-e は、現在のシステム ユーザーとして Windows 認証を通じてデータベースにログインすることを意味します。
-ssadd / –ssremove パラメータ:
-ssadd はセッション データベースの追加を意味し、-ssremove はセッション データベースの削除を意味します。パラメータの説明:
t
セッション データをデータベースの SQL Server tempdb に保存します。これがデフォルトの設定です。セッション データが tempdb データベースに保存されている場合、SQL サーバーが再起動されるとセッション データは失われます。

セッション データを tempdb データベースではなく aspstate データベースに保存します。
c
セッション データをカスタム データベースに保存します。 c オプションを指定する場合は、-d オプションを使用してカスタム データベースの名前も含める必要があります。
私の設定は次のとおりです: aspnet_regsql.exe -s . - e -d awbuisession -ssadd -sstype c

わかりました。基本はこれで終わりです。 。
次に、構築したばかりの Web サイトを iis にデプロイします。しかし、ロードしたいので。少なくとも 2 つのコピーを展開する必要があります。


nginx がロード バランシングとマルチサイト共有セッションを実装する方法

サーバーの 1 つで defaut.aspx の "サーバー 1" を "サーバー 2" に変更しました。これを行う主な目的は、違いを生むことです。

詳細は次のとおりです。

nginx がロード バランシングとマルチサイト共有セッションを実装する方法

2 つの Web サイトの URL は次のとおりです。

サーバー 1: 127.0.0.1:8081;

サーバー 2:127.0.0.1:8080;

わかりました。次にnignxの設定を行っていきます。

まず、nginx\conf 構成ファイルで nginx.conf ファイルを見つけ、メモ帳で開き、

nginx がロード バランシングとマルチサイト共有セッションを実装する方法

上記の設定を行います:

# ##わかりました。 nginx がこのように設定されていれば問題ありません。 nginx を開始しましょう。

nginx で設定した URL をブラウザに入力します (例: 127.0.0.1:8090

nginx がロード バランシングとマルチサイト共有セッションを実装する方法

サーバー 1 が表示されます)サービスの提供を開始しました。もう一度「setsession」をクリックしてセッション値を設定しましょう。

nginx がロード バランシングとマルチサイト共有セッションを実装する方法

サーバー 2 が動作し始めるのがわかります。この時点で、もう一度「getsesion」をクリックして、サーバー 1 に設定されたばかりのセッション値を確認します。結果は次のようになります。

nginx がロード バランシングとマルチサイト共有セッションを実装する方法

これが発生した場合の主な理由は次のとおりです。セッション値をデータベースに保存します。サーバー 1 とサービス 2 の間のセッションは、主に

nginx がロード バランシングとマルチサイト共有セッションを実装する方法

aspstatetempsessions テーブル ## の sessionid が原因で、セッション中に共有されません。

#セッション ID には、Web サイトによって生成された 24 ビットのセッション ID と 8 ビットのアプリ名という 2 つの部分が含まれます。サイトが異なると、アプリ名は異なります。24 ビットのセッション ID を異なるサイトで同じにできる場合は、アプリ名を結合して追加した後のセッション ID が同じであることを確認する必要があります。取得したセッション ID がアプリ名と無関係になるように、ストアド プロシージャ tempgetappid を変更できます。次のように tempgetappid を変更します:

コードをコピーします。は次のとおりです:

alter プロシージャ [dbo].[tempgetappid]

@appname Tappname,
@appid int Output
as
set @appname = 'test' -- lower(@appname) 複数のサイトのアプリ名が固定値になるようにこれを変更します。
set @appid = null
select @appid = appid
from [awbuisession].dbo.aspstatetempapplications
where appname = @appname
@appid が null の場合 begin
begin tran
select @appid = appid
from [awbuisession].dbo.aspstatetempapplications with (tablockx)
where appname = @appname
if @appid is null
begin
exec gethashcode @appname, @appid Output
insert [awbuisession].dbo.aspstatetempapplications
values
(@appid, @appname)
if @@error = 2627
begin
declare @dupapptappname
select @dupapp = rtrim(appname)
from [awbuisession].dbo.aspstatetempapplications
where appid = @appid
raiserror('SQL セッション状態の致命的なエラー: アプリケーション ''%s 間のハッシュ コードの衝突'' と ''%s''。問題を解決するには、最初のアプリケーションの名前を変更してください。',
18, 1, @appname, @dupapp)
end
end
commit
end
return 0


上記の変更後、複数のサイトが同じセッション ID を共有していることを認識する必要があります。



各サイトを再起動します。 Web サイトを再度参照します。

#「setsession」をクリックし、nginx がロード バランシングとマルチサイト共有セッションを実装する方法

「getsession」を再度クリックします。 nginx がロード バランシングとマルチサイト共有セッションを実装する方法

このようにして、サーバー 2 がサーバー 1 に設定したばかりのセッション値を提供していることがわかります。 nginx がロード バランシングとマルチサイト共有セッションを実装する方法

もう一度「getsession」をクリックしてみましょう。

サーバー 1 とサーバー 2 が同じ結果を返し、「マルチサイト共有」セッションが実現していることがわかります。 ''nginx がロード バランシングとマルチサイト共有セッションを実装する方法

追加のポイント: セッションの有効期限は、主に SQL サーバー エージェントのジョブが完了したときに削除されます。

以上がnginx がロード バランシングとマルチサイト共有セッションを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Windowsでnginxを構成する方法 Windowsでnginxを構成する方法 Apr 14, 2025 pm 12:57 PM

Windowsでnginxを構成する方法は? nginxをインストールし、仮想ホスト構成を作成します。メイン構成ファイルを変更し、仮想ホスト構成を含めます。 nginxを起動またはリロードします。構成をテストし、Webサイトを表示します。 SSLを選択的に有効にし、SSL証明書を構成します。ファイアウォールを選択的に設定して、ポート80および443のトラフィックを許可します。

Dockerコンテナの名前を確認する方法 Dockerコンテナの名前を確認する方法 Apr 15, 2025 pm 12:21 PM

すべてのコンテナ(Docker PS)をリストする手順に従って、Dockerコンテナ名を照会できます。コンテナリストをフィルタリングします(GREPコマンドを使用)。コンテナ名(「名前」列にあります)を取得します。

Dockerによってコンテナを起動する方法 Dockerによってコンテナを起動する方法 Apr 15, 2025 pm 12:27 PM

Docker Containerの起動手順:コンテナ画像を引く:「Docker Pull [Mirror Name]」を実行します。コンテナの作成:「docker create [options] [mirror name] [コマンドとパラメーター]」を使用します。コンテナを起動します:「docker start [container name or id]」を実行します。コンテナのステータスを確認してください:コンテナが「Docker PS」で実行されていることを確認します。

Nginxが開始されるかどうかを確認する方法 Nginxが開始されるかどうかを確認する方法 Apr 14, 2025 pm 01:03 PM

nginxが開始されるかどうかを確認する方法:1。コマンドラインを使用します:SystemCTLステータスnginx(Linux/unix)、netstat -ano | FindStr 80(Windows); 2。ポート80が開いているかどうかを確認します。 3.システムログのnginx起動メッセージを確認します。 4. Nagios、Zabbix、Icingaなどのサードパーティツールを使用します。

Docker用のコンテナを作成する方法 Docker用のコンテナを作成する方法 Apr 15, 2025 pm 12:18 PM

Dockerでコンテナを作成します。1。画像を引く:Docker Pull [ミラー名]2。コンテナを作成:Docker Run [Options] [Mirror Name] [コマンド]3。コンテナを起動:Docker Start [Container Name]

Nginxバージョンを確認する方法 Nginxバージョンを確認する方法 Apr 14, 2025 am 11:57 AM

nginxバージョンを照会できるメソッドは次のとおりです。nginx-vコマンドを使用します。 nginx.confファイルでバージョンディレクティブを表示します。 nginxエラーページを開き、ページタイトルを表示します。

nginxでクラウドサーバードメイン名を構成する方法 nginxでクラウドサーバードメイン名を構成する方法 Apr 14, 2025 pm 12:18 PM

クラウドサーバーでnginxドメイン名を構成する方法:クラウドサーバーのパブリックIPアドレスを指すレコードを作成します。 NGINX構成ファイルに仮想ホストブロックを追加し、リスニングポート、ドメイン名、およびWebサイトルートディレクトリを指定します。 nginxを再起動して変更を適用します。ドメイン名のテスト構成にアクセスします。その他のメモ:SSL証明書をインストールしてHTTPSを有効にし、ファイアウォールがポート80トラフィックを許可し、DNS解像度が有効になることを確認します。

nginxサーバーがハングした場合はどうすればよいですか nginxサーバーがハングした場合はどうすればよいですか Apr 14, 2025 am 11:42 AM

NGINXサーバーがダウンすると、次のトラブルシューティング手順を実行できます。NGINXプロセスが実行されていることを確認します。エラーメッセージのエラーログを表示します。 nginx構成の構文を確認します。 nginxには、ファイルにアクセスするために必要な権限があることを確認してください。ファイル記述子をチェックして制限を開いてください。 Nginxが正しいポートで聴いていることを確認してください。 nginxトラフィックを許可するために、ファイアウォールルールを追加します。バックエンドサーバーの可用性を含む逆プロキシ設定を確認します。さらなる支援については、テクニカルサポートにお問い合わせください。

See all articles