検索
ホームページバックエンド開発PHPチュートリアルnginx+tomcat+redisでセッション共有を実現

nginx最も人気のあるオープンソースリバースプロキシHTTPサーバーとして、その軽量、高性能、高信頼性などにより、リソースキャッシュ、Webサーバー負荷分散などの機能を実装するために使用されます。その特徴として、インターネットで広く使用されており、プロジェクトで非常に一般的なアプリケーションがあり、関連する概念についての豊富な紹介がオンラインにあります。分散Webサーバークラスターをデプロイした後、セッション共有を実装する必要があります。tomcatクラスターセッションブロードキャスト、など、tomcatサーバーにはさまざまな実装ソリューションがあります。 nginx IP ハッシュ 戦略、nginx スティッキー モジュール およびその他のソリューションについて、この記事では主に セッション 統合ストレージ管理用の redis サーバーを使用した共有ソリューションを紹介します。

関連するアプリケーション構造は以下の図を参照してください:

II. 環境構成

テスト環境は

Linux CentOS 6.5をベースにしており、tomcatredisをインストールしてください。 まずnginx 関連環境、詳細な説明は省略しますが、この記事のテスト構成は次のとおりです:

10.129.221.70:80tomcat_1 7.0.54 10.129.221.70:8080tomcat_2 7.0.54 10.129 .221.70:9090redis 2.8.19 10.129.221.70:6379

3. tomcat-redis-session-manager-master

1をビルドします。ソースコードはgradleをベースに構築されているため、最初にgradleの環境を設定してください。

2github からtomcat-redis-session-manager-masterのソースコードを取得します。アドレスは次のとおりです:

ソースを表示print ?

1. https://github.com/jcoleman/tomcat-redis-session-manager

3、作成者が 3 番目のファイルを使用しているため、ソース コード内で build.gradle ファイルを見つけます。 -party ウェアハウス (sonatype)、アカウントを登録する必要がありますが、面倒です。コメントした直後に maven セントラル ウェアハウスを使用し、署名関連のスクリプトをコメントし、その出力スクリプトを追加するだけです。依存パッケージcopyJars (distディレクトリ)、変更されたbuild.gradleファイルは次のとおりです:

ソースを表示print?

001.a 適用プラグイン: 'java'

002.apply プラグイン: 'maven'

003.app ly プラグイン: 'signing'

004.

005.group = 'com.orangefunction'

006.version = '2.0.0 '

007.

008.repositories {

009.mavenCentral()

01 0. }

012.compileJava {

013.sourceCompatibility = 1.7

014.targetCompatibility = 1.7

015.}

016.

017.dependency {

018.compile グループ: 'org.apache.tomcat'、名前: 'tomcat-catalina'、バージョン: '7.0.27'

019.compile グループ: 'redis.clients'、名前: 'jedis'、バージョン: '2.5.2'

020。コンパイルグループ: 'org.apache.commons'、名前: 'commons-pool2'、バージョン: '2.2'

021 .//コンパイル グループ: 'commons-codec'、名前: 'commons-codec'、バージョン: ' 1.9'

022.testCompile グループ: 'junit'、名前: 'junit'、バージョン: '4 .+'

024.testCompile 'org.hamcrest:hamcrest-core:1.3'

025.testCompile 'org.hamcrest:hamcrest-library:1.3'

026.testCompile 'org.mockito:mockito-all:1.9 .5'

027.testCompile グループ: 'org.apache.tomcat'、名前: 'tomcat-coyote'、バージョン: '7.0.27'

028.}

030.task javadocJar(type : Jar、dependsOn: javadoc) {

031.classifier = 'javadoc'

032.from ' build/docs/javadoc'

033.}

034.tasksourcesJar(type: Jar) {

036.fromsourceSets.main.allSource

037.classifier = 'sources'

038. }

040.artifacts {

041.archives jar

042.

043.archives javadocJar

044.archivessourcesJar

045.}

047.//signing {

048.// 署名configurations.archives

049.//}

050. 51.タスクコピーJar (タイプ: コピー) {

052.fromconfigurations.runtime

053.into 'dist'

054.}

055.

056.​​uploadArchives {

057.repositories {

058.mavenDepロイアー

059.beforeDeployment { MavenDeployment デプロイメント -> signed.sign Pom(デプロイメント)}

061.//repository(url: '

https://oss.sonatype.org/service/local/staging/デプロイ/maven2/

') {

062.// 認証(ユーザー名: sonatypeユーザー名、パスワード: sonatypePassword)

063.//}

064.//repository(url: '

https://oss.sonatype .org/content/repositories/snapshots

') {

065.// 認証(ユーザー名: sonatypeUsername, パスワード: sonatypePassword)

066.//}

067.

068.pom.project {

069 .name 'tomcat-redis-session-manager'

070.packaging 'jar'

071.description 'Tomcat Redis Session Manager は、Redis にセッションを保存するための Tomcat 拡張機能です'

072.url 'https:// github.com/jcoleman/tomcat-redis-session-manager

'

073.

074.issueManagement {

075.url '

https://github.com

:jcoleman/tomcat-redis-session-manager /issues'

076.system 'GitHub の問題'

077.}

079 .scm {

080.url 'https://github.com

:jcoleman/tomcat-redis-session -manager'

081.connection 'scm:git:

git://github.com/jcoleman/tomcat-redis-session-manager.git

'

082.developerConnection 'scm:git:git@github.com:jcoleman/tomcat-redis-session-manager.git'

083.}

085.licenses {

086.license {

087.name 'MIT'

088.url '

http://opensource.org/licenses/MIT

'089.distribution 'repo'

090.}

091.}

092. 093.developers {

094.developer {

095.id 'jcoleman'

096.name 'James Coleman'

097.email 'jtc331@gmail.com'

098.url '

https:// github.com/jcoleman

gradle

ソースコードをビルドし、コンパイルして出力するコマンド tomcat-redis-session-manager-master

と依存関係

jar

パッケージ

ソースを表示する

print

?1.gradle build -x test co pyJars すべての出力リストファイルは次のとおりです: IV. tomcat Configuration 2つのtomcat webサーバーをそれぞれインストールして構成します。

ポート番号を 8080 9090

に接続し、異なるホストに分散されている場合は、同じポート番号を使用できることを確認します。

5. テストページを書く

2station

tomcatのアクセスを区別するために、ページを個別に書いてデプロイ用にパッケージ化します: 1、テストを書きますtomcat_1のページ、「tomcat_1からの応答」を表示し、このページには現在の

セッション

の値を表示し、パッケージ化して

tomcat_1サーバーに公開するためのボタンが提供されます。 2

tomcat_2によって書かれました テストページには「tomcat_2からの応答」が表示され、ページには現在のセッションの値を表示し、パッケージ化して、 tomcat_2 サーバー; 現時点では、http:// 10.129.221.70:8080

http://10.129.221.70:9090 にアクセスします。 ウェブ サーバーなので、それぞれ異なるページのコンテンツと セッション の値が異なります。 6. tomcat セッションマネージャー構成 構成を変更し、tomcat-redis-session-manager-master

tomcat セッションmanager として使用します。 1、それぞれ3 つの手順で生成された tomcat-redis-session-manager-master と依存する jar パッケージは、

tomcat lib

フォルダー

2 に含まれています。 インストールディレクトリ 2

ステーションtomcatcontext.xmlファイルをそれぞれtomcat-redis-session-manager-mastersesとして使用するように変更します。しおんマネージャー。 redis アドレスとポートを同時に指定します。

context.xml 次の構成を追加します: ソースを表示print?1.2.3.4.host='localhost'5.port='6379'6.database ='0'7.maxInactiveInterval='60' />

8.

3、それぞれ

2ステーションtomcatサーバーを再起動します。

Seven、

nginx

を構成する

1

default.conf を変更する

構成ファイルを有効にする

アップストリーム ロードバランシング クラスター 、ポーリング モードがデフォルトで使用されます。 ソースを見るprint

?01.upstream site {

ip_hash; //

based ip_hashdistribution 02.server localhost:80 80;03.サーバーローカルホスト :9090;04.} 05.06.server {

07.listen 80;

08.サーバー名 ローカルホスト;

09. 

10.#charset koi8-r;

11.#access_log /var/log/nginx/log/host.access.log main;

12. 

13.location / {

14.#root /usr/share/nginx/html;

15.#index index.html index.htm;

16.index index_tel.jsp インデックス。jsp インデックス.html インデックス.htm ; 

17.proxy_redirect オフ;   

18.proxy_set_header ホスト $host;   

19.proxy_set_header X-Real-IP $remote_addr;   

20.proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   

21.client_max_body_size 10m;   

22.client_body_buffer_size 128k;   

23.proxy_buffers 32 4k; 

24.proxy_connect_timeout 3;   

25.proxy_send_timeout 30;   

26.proxy_read_timeout 30;  

27.proxy_pass http://site;

28. 

29.}

30. 

31.#error_page 404 /404.html;

32. 

33.# サーバーエラーページを静的ページ/50x.htmlにリダイレクトします

34.#

35.error_page 500 502 503 504 /50x.html;

36.location = /50x.html {

37 .root /usr/share/nginx/html;

38.}

39. 

40.# PHP スクリプトを 127.0.0.1:80でリッスンする Apache にプロキシします

41.#

42.#location ~ .php$ {

43.# proxy_pass http://127.0.0.1;

44.#}

45. 

46.# PHP スクリプトを 127.0.0.1:9000をリッスンするFastCGI サーバーに渡します

47.#

48.#location ~ .php$ {

49.# root html;

50.# fastcgi_pass 127.0 .0.1:9000;

51.# fastcgi_index index.php;

52.# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

53.# include fastcgi_params;

54.#}

55. 

56.# Apache のドキュメント ルートが nginx の root と一致する場合、.htaccess ファイルへのアクセスを拒否します

58.#

59.#location ~ /.ht {

60.# 拒否すべて;

61.#}

62.}

2

nginx 重新規追加配置

ソースを表示

print?1.ng inx -s reload

八、構成Tomcat

保存された

session

实体はredis中に解放されており、tomcatは记录session-id值与redis 実行对比,セッションID cookie内で取得されており、異なるtomcatが保存されているsessioncookieの位置が異なるため、すべてのtomcat内を変更する必要がありますconf/context.xml 、修正内容は以下の通り: sessionCookiePath="/"

>

九、测试結果

1

、访问 http://10.129.221.70 :8080 直接リクエスト到tomcat_1服务器、 显示 “tomcat_1からの応答”

セッション值は '56E2FAE376A 47F1C0961D722326B8423'

2http://10.129.221.70:9090にアクセスtomcat_2server、に直接リクエスト

「tomcat_2からの応答」を表示

セッションの値は'56E2FAE376A47F1C0961D722326B8423'

3

にアクセスしてくださいhttp://10.129.221.70 (デフォルト) 80port) nginx へのリクエスト 指定された へのリバースプロキシWebサーバーは、デフォルトのポーリングロード方式により、 ページを繰り返し更新することで表示される内容は「tomcat_1からの応答」

「tomcat_2からの応答」の間で切り替わりますが、セッション値は'56E2FAE376A47F1C0961D722326B8423'のままです。4

を使用して接続します

redis サーバー、"56E2FAE376A47F1C0961D722326B8423" があることが表示されますkey session data、value はシリアル化されたデータです。 10. この時点で、nginxロードバランシングに基づくtomcat

クラスターの

セッションの整合性が達成されています。 起動シーケンス: redis——nginx

——

tomcatredis起動スクリプト=/usr/locat/redis.2.0.1/src/redis-server nginx+tomcat+redisでセッション共有を実現 上記は、セッション共有を実現するための nginx+tomcat+redis を、関連する内容も含めて紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。

Version

IP_Port

nginx

1.6.

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPはユーザーのセッションをどのように識別しますか?PHPはユーザーのセッションをどのように識別しますか?May 01, 2025 am 12:23 AM

phpidentifiesauser'ssessionsingsinssessionCookiesIds.1)whensession_start()iscalled、phpgeneratesauniquesidstoredsored incoookienadphpsessidontheuser'sbrowser.2)thisidallowsphptortorieSessiondatadata fromthata

PHPセッションを保護するためのベストプラクティスは何ですか?PHPセッションを保護するためのベストプラクティスは何ですか?May 01, 2025 am 12:22 AM

PHPセッションのセキュリティは、次の測定を通じて達成できます。1。session_regenerate_id()を使用して、ユーザーがログインまたは重要な操作である場合にセッションIDを再生します。 2. HTTPSプロトコルを介して送信セッションIDを暗号化します。 3。Session_Save_Path()を使用して、セッションデータを保存し、権限を正しく設定するためのSecure Directoryを指定します。

PHPセッションファイルはデフォルトで保存されていますか?PHPセッションファイルはデフォルトで保存されていますか?May 01, 2025 am 12:15 AM

phpsessionFilesToredInthededirectoryspecifiedBysession.save_path、通常/tmponunix-likesystemsorc:\ windows \ temponwindows.tocustomizethis:1)uesession_save_path()tosetaCustomdirectory、ensuringit'swritadistradistradistradistradistra

PHPセッションからデータをどのように取得しますか?PHPセッションからデータをどのように取得しますか?May 01, 2025 am 12:11 AM

toretrievedatafrompsession、Startthessession withsession_start()andAccessvariablesshe $ _SessionArray.forexample:1)Startthessession:session_start()

セッションを使用してショッピングカートを実装するにはどうすればよいですか?セッションを使用してショッピングカートを実装するにはどうすればよいですか?May 01, 2025 am 12:10 AM

セッションを使用して効率的なショッピングカートシステムを構築する手順には、次のものがあります。1)セッションの定義と機能を理解します。セッションは、リクエスト全体でユーザーのステータスを維持するために使用されるサーバー側のストレージメカニズムです。 2)ショッピングカートに製品を追加するなど、基本的なセッション管理を実装します。 3)製品の量管理と削除をサポートし、高度な使用状況に拡大します。 4)セッションデータを持続し、安全なセッション識別子を使用することにより、パフォーマンスとセキュリティを最適化します。

PHPでインターフェイスをどのように作成して使用しますか?PHPでインターフェイスをどのように作成して使用しますか?Apr 30, 2025 pm 03:40 PM

この記事では、PHPでインターフェイスを作成、実装、および使用する方法について説明し、コード組織と保守性の利点に焦点を当てています。

crypt()とpassword_hash()の違いは何ですか?crypt()とpassword_hash()の違いは何ですか?Apr 30, 2025 pm 03:39 PM

この記事では、PHPのCrypt()とpassword_hash()の違いについて、パスワードハッシュの違いについて説明し、最新のWebアプリケーションの実装、セキュリティ、および適合性に焦点を当てています。

PHPのクロスサイトスクリプト(XSS)をどのように防ぐことができますか?PHPのクロスサイトスクリプト(XSS)をどのように防ぐことができますか?Apr 30, 2025 pm 03:38 PM

記事では、入力検証、出力エンコード、およびOWASP ESAPIやHTML浄化器などのツールを使用して、PHPのクロスサイトスクリプト(XSS)を防止します。

See all articles

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 中国語版

SublimeText3 中国語版

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

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。