nginx+tomcat+redisでセッション共有を実現

WBOY
リリース: 2016-08-08 09:24:04
オリジナル
1785 人が閲覧しました

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.

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート