`

通过nginx解决resin集群session不同步问题

 
阅读更多

转自:http://blog.chinaunix.net/uid-14007440-id-3150269.html

 

本文通过cookie_session来判别,解决了Nginx session不同步问题。

AD:

测试环境:
server1   服务器上安装了  nginx + resin
server2  服务器上只安装了 resin          
 
server1  IP 地址: 192.168.6.121
server2  IP 地址: 192.168.6.162
 
安装步骤:
1. 在server1 上安装配置 nginx + nginx_upstream_jvm_route
shell $> svn checkout http ://nginx-upstream-jvm-route.googlecode.com/svn/trunk/ nginx-upstream-jvm-route-read-only
shell $> tar zxvf  nginx-0.7.61
shell $> cd nginx-0.7.61
shell $> patch - p0  < ../nginx-upstream-jvm-route-read-only/jvm_route.patch
shell $> useradd www
shell $> ./configure --user=www --group=www --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module  --add-module=/root/nginx-upstream-jvm-route-read-only
shell $> make
shell $> make install
 
2.分别在两台机器上 安装 resin
 
### 修改环境变量###
shell $> vim /etc/profile
###在 umask 022 下填加以下###
JAVA_HOME=/usr/lib/jvm/java-6-sun
export JAVA_HOME
JRE_HOME="${JAVA_HOME}"/jre
export JRE_HOME
CLASSPATH=.:"${JAVA_HOME}"/lib/tools.jar:"${JAVA_HOME}"/lib/dt.jar${RESIN_HOME}"/lib/resin.jar:"${CLASSPATH}
export CLASSPATH
RESIN_HOME=/usr/local/resin
export RESIN_HOME
PATH="${JAVA_HOME}"/bin:"${PATH}"
export PATH
shell $> tar zxvf resin-3.1.9.tar.gz
shell $> cd resin-3.1.9
shell $> ./configure --prefix=/usr/local/resin
shell $> make
shell $> make install
 
3. 配置两台机器 的 resin
shell $> cd /usr/local/resin
shell $> cd conf
shell $> vim resin.conf
##  查找     <http address="*" port="8080"/>
## 注释掉 <!--http address="*" port="8080"/-->
## 查找      <server id="" address="127.0.0.1" port="6800">
## 替换成    
    <server id="a" address="192.168.6.121" port="6800">
    <!-- server2 address=192.168.6.162 -->
    <http id="" port="8080"/>
    </server>
    <server id="b" address="192.168.6.121" port="6801">
    <!-- server2 address=192.168.6.162 -->
    <http id="" port="8081"/>
    </server>
shell $> cd /usr/local/resin/webapps/ROOT/
shell $> mv index.jsp   index.jsp.bak
shell $> vim index.jsp
## 填入以下内容
 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
%>
<html>
  <head>
    </head>
      <body>
        121
       <!--server2  这里为 162 -->
        <br />
       <%out.print(request.getSession()) ;%>
       <!--输出session-->
        <br />
        <%out.println(request.getHeader("Cookie")); %>
      <!--输出Cookie--> 
      </body>
 </html>
###重启  resin 服务#####
### server1 服务器#####
shell $> /usr/local/resin/bin/httpd.sh -server a start
###注意 如果没修改 环境变量会报错
### server2 服务器 ####
shell $> /usr/local/resin/bin/httpd.sh -server b start
### 注意的是  server2 服务器 只启动  server_id b  ###
 
4.整合 ngxin  resin
shell $> cd /usr/local/nginx/conf
shell $> mv nginx.conf nginx.bak
shell $> vim nginx.conf
## 以下是配置 ###
 
user  www www;
worker_processes 4;
error_log  logs/nginx_error.log  crit;
pid        /usr/local/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;
events
{
 use epoll;
 worker_connections 2048;
}
http
{
  upstream backend {
    server 192.168.6.121:8080 srun_id=a; 
    ####  这里 srun_id=a   对应的是 server1  resin 配置里的 server id="a"
    server 192.168.6.162:8081 srun_id=b;
    ####  这里 srun_id=b   对应的是 server2 resin 配置里的 server id="b"
    jvm_route $cookie_JSESSIONID|sessionid;
  }
 include       mime.types;
 default_type  application/octet-stream;
 #charset  gb2312;
 charset UTF-8;
 server_names_hash_bucket_size 128;
 client_header_buffer_size 32k;
 large_client_header_buffers 4 32k;
 client_max_body_size 20m;
 limit_rate  1024k;
 sendfile on;
 tcp_nopush     on;
 keepalive_timeout 60;
 tcp_nodelay on;
 fastcgi_connect_timeout 300;
 fastcgi_send_timeout 300;
 fastcgi_read_timeout 300;
 fastcgi_buffer_size 64k;
 fastcgi_buffers 4 64k;
 fastcgi_busy_buffers_size 128k;
 fastcgi_temp_file_write_size 128k;
 gzip on;
#gzip_min_length  1k;
 gzip_buffers     4 16k;
 gzip_http_version 1.0;
 gzip_comp_level 2;
 gzip_types       text/plain application/x-javascript text/css application/xml;
 gzip_vary on;
 #limit_zone  crawler  $binary_remote_addr  10m;
server
 {
   listen       80;
   server_name  192.168.6.121;
   index index.html index.htm index.jsp;
   root  /var/www;

   location ~ .*\.jsp$
   {
     proxy_pass  http://backend ;
     proxy_redirect    off;
     proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
     proxy_set_header  X-Real-IP  $remote_addr;
     proxy_set_header  Host $http_host;
   }
   location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
   {
     expires      30d;
   }
   location ~ .*\.(js|css)?$
   {
     expires      1h;
   }
   location /stu {
     stub_status on;
     access_log   off;
   }
  log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
             '$status $body_bytes_sent "$http_referer" '
             '"$http_user_agent" $http_x_forwarded_for';
#  access_log  off;
  }


}

5.测试,打开浏览器,输入 http://192.168.6.121/index.jsp

session  显示 aXXXXX  访问的是  121 服务器也就是  server1,因为是第一次访问所以Cookie 没有获得,刷新一下看他是否轮询会访问到 162 server2.

 

刷新 N 遍后仍然是 121,也就是补丁起作用了,cookie 值 也获得了,为了测试,我又打开了 “火狐浏览器”(因为session 和 cookie问题所以从新打开别的浏览器),输入网址:

显示的是 162 ,session 值 是以 bXXX 开头的,刷新 N遍后:

仍然是 162  server 2服务器!!大家测试的时候如果有疑问可一把 nginx 配置文件的
srun_id=a  srun_id=b 去掉,然后在访问,就会知道 页面是轮询访问得了!!
  
我上传的补丁清在 linux 系统上解压,因为 51cto 不支持 gz格式,所以我就改了一后缀名,在linux 系统上执行
shell $>  tar zxvf nginx-upstream-jvm-route-read-only.rar
就可以了!
 
tomcat 的解决方法 README 上有:
1.For resin
upstream backend {
    server 192.168.0.100 srun_id=a;
    server 192.168.0.101 srun_id=b;
    server 192.168.0.102 srun_id=c;
    server 192.168.0.103 srun_id=d;
    jvm_route $cookie_JSESSIONID|sessionid;
}
2.For tomcat
upstream backend {
    server 192.168.0.100 srun_id=a;
    server 192.168.0.101 srun_id=b;
    server 192.168.0.102 srun_id=c;
    server 192.168.0.103 srun_id=d;

jvm_route $cookie_JSESSIONID|sessionid reverse;
}

分享到:
评论

相关推荐

    泛微ecology nginx+resin集群部署手册

    泛微 ecology nginx+resin集群部署说明文档,详细讲解ecology 集群部署的实施方式方法及步骤。

    nginx tomcat memcached 集群 session共享

    这里我们讨论的主题是如何通过Nginx、Tomcat和Memcached来实现集群环境下的session共享。Nginx作为反向代理服务器,负责负载均衡,Tomcat作为应用服务器运行Java Web应用程序,而Memcached则作为分布式内存缓存系统...

    Nginx1.1实现Resin4集群

    - 启动Nginx和Resin服务器,通过访问Nginx的公共IP或域名测试集群功能。 - 监控与优化:使用工具如Nginx的access.log和error.log,以及Resin的日志监控集群状态。根据性能指标调整Nginx和Resin的配置,如超时时间...

    泛微 e-cology9 nginx+resin集群部署手册

    为了提高系统的可用性和性能,通常会采用集群部署的方式,而在此过程中,Nginx 和 Resin 服务器的结合使用是非常常见的一种架构。Nginx 作为反向代理和负载均衡器,Resin 则作为应用服务器,负责处理业务逻辑。 一...

    Redis+nginx集群部署

    本文将详述如何使用Tomcat、Nginx和Redis来搭建这样的集群,并着重讲解Session共享的问题,因为这是多服务器环境中的关键挑战。 **标题:Redis+nginx集群部署** **描述:**在本实践中,我们将结合Tomcat应用服务器...

    nginx反向代理导致session失效的问题解决

    两边通过同一个nginx进行反向代理,nginx配置大致如下, location /health/ { proxy_pass http://192.168.40.159:8081/health/; #无问题的配置 } location /health-dev/ { proxy_pass ...

    nginx,tomcat集群,session共享

    nginx,tomcat集群,session共享,基于memcache 包含nginx配置,tomcat配置,以及tomcat所需要的jar 不包含nginx,tomcat,jdk,memcache的安装

    Nginx+Tomcat+Memcached集群Session共享

    标题 "Nginx+Tomcat+Memcached集群Session共享" 描述了在分布式环境中如何通过Nginx反向代理服务器、Tomcat应用服务器集群以及Memcached缓存系统来实现Session的共享。这是一个常见的高可用性和负载均衡解决方案。...

    nginx tomcat集群 session复制

    【Nginx Tomcat集群与Session复制】 在高并发、高可用的Web应用环境中,使用Nginx作为负载均衡器,结合Tomcat集群是常见的架构选择。为了保证用户体验的连续性,Session复制技术用于在多个Tomcat实例之间共享用户...

    nginx+tomcat+session同步

    "nginx+tomcat+session同步" bản文中,我们将详细讨论使用nginx和tomcat实现session同步的方法。 首先,让我们了解什么是session同步。Session同步是指在多台服务器上共享用户会话状态,以确保用户在不同服务器...

    Nginx Tomcat 集群的Session 复制

    Nginx Tomcat 集群的Session 复制,解决了,集群情况下的session复制问题。

    Nginx+Resin

    总结来说,Nginx+Resin的组合是一种常见的Web服务架构,利用Nginx的高效性能和Resin的强大Java应用支持,为大型网站和企业应用提供可靠且高效的解决方案。理解并熟练掌握这两个工具的配置和协作,对于任何IT专业人士...

    nginx于resin集成(nginx安装)

    在IT行业中,Nginx和Resin是两种广泛使用的服务器软件。Nginx以其高性能、低内存占用和反向代理能力而闻名,而Resin则是一款基于...无论是对于运维人员还是开发人员,这些知识都将极大地提升你的技能和解决问题的能力。

    nginx+tomcat+redis服务器集群session共享

    通过以上步骤,我们可以构建一个基于nginx、tomcat和redis的服务器集群,有效地实现了session共享。这种架构不仅提高了系统的可用性和扩展性,还保证了用户在集群中的体验一致性。在实际应用中,还可以根据需求调整...

    nginx+redis实现session共享

    通过Nginx的负载均衡功能,可以实现集群中的服务器之间的请求分发,从而提高系统的可用性和可靠性。 接着,Redis作为一个高速缓存数据库,特别适合用于存储临时但频繁访问的数据,如session。当用户在任一应用中...

    Windows7 + Nginx + Memcached + Tomcat 集群 session 共享

    在构建分布式系统时,session共享是一个关键问题,特别是在使用多个服务器来处理用户请求的集群环境中。本主题将详细探讨如何在Windows7环境下,利用Nginx作为负载均衡器,Memcached作为session存储,以及Tomcat作为...

    linux下nginx-tomcat集群及 memecached session共享

    tomcat集群及session共享,亲测成功,下载的文件包含了所有需要的jar包及nginx,memcached安装,配置,由于试了很多种方法,下了很多包,有些也需要积分,所以这里下载要些积分留着用,不好意思了,如果配置过程中有...

    resin+nginx+使用说明文档

    【标题】"resin+nginx+使用说明文档" ...通过深入学习和理解"resin配置.txt"和"resin-4.0-admin.pdf"中的内容,以及实践安装和配置"resin-4.0.16.zip"和"nginx-1.0.5.zip",开发者可以更好地掌握这两种技术的集成使用。

    Apache + nginx + resin 详细配置

    Apache、Nginx和Resin都是在Web服务器领域中广泛使用的软件。Apache是经典的HTTP服务器,Resin是一款高性能的Java应用服务器,而Nginx以其高效的反向代理和负载均衡能力著称。将这三者结合使用,可以构建出一个高...

Global site tag (gtag.js) - Google Analytics