Home  >  Article  >  Backend Development  >  nginx+tomcat+redis realizes session sharing

nginx+tomcat+redis realizes session sharing

WBOY
WBOYOriginal
2016-08-08 09:24:041785browse

nginxAs the most popular open source reverse proxyHTTP Server, it is used to implement resource caching, web serverload balancing and other functions. Due to its lightweight, high performance, high reliability and other characteristics, it is widely used in Internet has very common applications in projects, and there are rich introductions to related concepts online. After the distributed web servercluster is deployed, it is necessary to implement sessionsharing. There are various implementation solutions for tomcat server, such as tomcat cluster session broadcast, nginx IP hash Strategy, nginx sticky module and other solutions, this article mainly introduces the sharing solution using redis server for session unified storage management.

 Relevant application structure refer to the figure below:

II. Environment configuration

 The test environment is based on Linux CentOS 6.5, please install tomcat, redis, first nginx related environment , without describing in detail, the test configuration of this article is as follows:

Version

IP_Port

nginx

1.6. 2

10.129.221.70:80

tomcat_1

7.0.54

10.129.221.70:8080

tomcat_2

7.0.54

10.129.221.70:9090

redis

2.8.19

10.129.221.70:6379

3. Build tomcat-redis-session-manager-master

1. Since the source code is built based on gradle, please configure the gradle environment first.

2, get the tomcat-redis-session-manager-master source code from github , the address is as follows:

view sourceprint ?

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

3, find the build.gradle file in the source code, because the author uses a third-party warehouse (sonatype ), you need to register an account, which is too troublesome, just use the maven central warehouse directly after commenting, also comment the signature-related scripts and add the output script of the dependent package copyJars (dist directory), modified build.gradle The file is as follows:

view sourceprint?

001.a pply plugin: 'java'

002.apply plugin: 'maven'

003.app ly plugin: 'signing'

004.

005.group = 'com.orangefunction'

006.version = '2.0.0'

007.

008.repositories {

009.mavenCentral()

01 0. }

011.

012.compileJava {

013.sourceCompatibility = 1.7

014.targetCompatibility = 1.7

015.}

016.

017.dependencies {

018.compile group: 'org. apache.tomcat', name: 'tomcat-catalina', version: '7.0.27'

019.compile group: 'redis.clients', name: 'jedis', version: '2.5.2'

020. compile group: 'org.apache.commons', name: 'commons-pool2', version: '2.2'

021.//compile group: 'commons-codec', name: 'commons-codec', version: ' 1.9'

022.

023.testCompile group: 'junit', name: 'junit', version: '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 group: 'org.apache.tomcat', name: 'tomcat- coyote', version: '7.0.27'

028.}

029.

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

031.classifier = 'javadoc'

032.from ' build/docs/javadoc'

033.}

034.

035.task sourcesJar(type: Jar) {

036.from sourceSets.main.allSource

037.classifier = 'sources'

038. }

039.

040.artifacts {

041.archives jar

042.

043.archives javadocJar

044.archives sourcesJar

045.}

046.

047.//signing {

048.// sign configurations.archives

049.//}

050.

051.task copyJars(type: Copy) {

052.from configurations.runtime

053.into 'dist'

054.}

055.

056.uploadArchives {

057.repositories {

058.mavenDeployer {

059.beforeDeployment { MavenDeployment deployment -> signing.sign Pom(deployment)}

060.

061.//repository(url: 'https://oss.sonatype.org/service/local/staging/deploy/maven2/') {

062.// authentication(userName: sonatypeUsername, password: sonatypePassword)

063.//}

064.//repository(url: 'https://oss.sonatype.org/content/repositories/snapshots') {

065.// authentication(userName: sonatypeUsername, password: sonatypePassword)

066.//}

067.

068.pom.project {

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

070.packaging 'jar'

071.description 'Tomcat Redis Session Manager is a Tomcat extension to store sessions in Redis'

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 Issues'

077.}

078.

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.}

084.

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 Command to build source code, compile and output

tomcat-redis-session-manager-master

and dependencies

jar

package

view source

print?1.gradle build -x test co pyJars  All output list files are as follows: IV. tomcat Configuration Install and configure two tomcat web

servers, respectively modify the Connector port number to 8080

and

9090

and make sure they all work properly. Of course, you can use the same port number if distributed on different hosts. 5. Write a test page

 In order to distinguish the access of

2stationtomcat, write the pages separately and package them for deployment: 1, write a test page for tomcat_1, Display

"response from tomcat_1"

, and the page provides a button to display the current session value, package and publish to tomcat_1 server;

2, for Written by tomcat_2 The test page displays "response from tomcat_2", and the page provides a button to display the current session value, package and publish it to the tomcat_2 server;

At this time, visit http:// 10.129.221.70:8080 and http://10.129.221.70:9090 addresses, because they are accessing different webservers, so they display different page content and session for sure. different. 6. tomcat session manager

Configuration Modify the configuration and use tomcat-redis-session-manager-master as tomcat session manager 1, respectively The

tomcat-redis-session-manager-master and dependent jar

packages generated in three steps are covered in the lib folder 2 of the

tomcat installation directory 、 Modify the 2station tomcat ’s context.xml file respectively to use tomcat-redis-session-manager-master as the

session manager. Specify at the same time redis address and port. context.xml Add the following configuration: view sourceprint?1.2.3.

4.host='localhost'

5.port='6379'6.database ='0'

7.maxInactiveInterval='60' />

8.3, respectively restart the

2

station

tomcat

servers.

Seven,

nginx

Configure

1, modify default.conf configuration file, enable upstream load balancing tomcat Cluster

, polling mode is used by default. view source

print?01.upstream site { ip_hash; //based on ip_hashdistribution 02.server localhost:8080;

03.server localhost :9090;

04.} 05. 06.server {

07.listen 80;

08.server_name  localhost;

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.http://www.it165.net/pro/webjsp/" target="_blank"class="keylink">jsp index.http://www.it165.net/pro/webjsp/"target="_blank" class="keylink">jsp index.html index.htm ; 

17.proxy_redirect          off;   

18.proxy_set_header        Host            $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.# redirect server error pages to the static page /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.# proxy the PHP scripts to Apache listening on 127.0.0.1:80

41.#

42.#location ~ .php$ {

43.#    proxy_pass   http://127.0.0.1;

44.#}

45. 

46.# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

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.# deny access to .htaccess files, if Apache's document root

57.# concurs with nginx's one

58.#

59.#location ~ /.ht {

60.#    deny  all;

61.#}

62.}

2nginx 重新加载配置

view sourceprint?

1.nginx -s reload

八、配置Tomcat

保存的session实体是放到redis中,tomcat可以记录session-id值与redis进行对比,session-id是从cookie中取得的,不同的tomcat存储sessioncookie的位置是不同的,所以必须修改所有tomcatconf/context.xml,修改内容如下:

 sessionCookiePath="/">

九、测试结果

1、访问 http://10.129.221.70:8080 直接请求到tomcat_1服务器,

    显示 “ response from tomcat_1 ”, session 值为 ‘56E2FAE376A47F1C0961D722326B8423’

2、Visit http://10.129.221.70:9090 Direct request to tomcat_2server,

  Display“response from tomcat_2” , session value is '56E2FAE376A47F1C0961D722326B8423';

3, visit http://10.129.221.70 (default 80port) request to nginx reverse proxy to the specified Webserver, due to the default polling load method,

  The content displayed by repeatedly refreshing the page switches between "response from tomcat_1" and "response from tomcat_2", but session The value remains as '56E2FAE376A47F1C0961D722326B8423';

4, use redis-cli to connect redis server, it will show that there is "56E2FAE376A47F1C0961D722326B8423" key session data, value is serialized data.

10. At this point, the session consistency of the tomcat cluster based on nginxload balancing has been achieved.

Startup sequence: redis——nginx——tomcat

redisStartup script=/usr/locat/redis.2.0.1/src/redis-server

nginx+tomcat+redis realizes session sharing

The above introduces nginx+tomcat+redis to realize session sharing, including the relevant content. I hope it will be helpful to friends who are interested in PHP tutorials.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:Bind click event after jqNext article:Bind click event after jq