zoukankan      html  css  js  c++  java
  • Nginx+tomcat负载均衡session问题解决

    测试环境:
    server1   服务器上安装了  nginx + tomcat01
    server2  服务器上只安装了 tomcat02          

    server1  IP 地址: 192.168.2.88
    server2  IP 地址: 192.168.2.89

    安装步骤:
    1. 在server1 上安装配置 nginx + nginx_upstream_jvm_route
    shell $> wget -c http://sysoev.ru/nginx/nginx-0.7.61.tar.gz
    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//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.分别在两台机器上 安装 tomcat和java (略)
    设置tomcat的server.xml, 在两台服务器的tomcat的配置文件中分别找到:
    <Engine name="Catalina" defaultHost="localhost" >
    分别修改为:
    Tomcat01:
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="a">
    Tomcat02:
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="b">
    并在webapps下面建立aa文件夹,在里面建立要测试的index.jsp文件,内容如下:
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    %>
    <html>
      <head>
        </head>
          <body>
           88
           <!--server1  这里为 88 -->
            <br />
           <%out.print(request.getSession()) ;%>
           <!--输出session-->
            <br />
            <%out.println(request.getHeader("Cookie")); %>
          <!--输出Cookie-->
          </body>
    </html>
    两个tomcat一样只需要修改红色的部分
    分别启动两个tomcat

    3.设置nginx
    shell $> cd /usr/local/nginx/conf
    shell $> mv nginx.conf nginx.bak
    shell $> vi 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.2.88:8080 srun_id=a;  
        server 192.168.2.89:8080 srun_id=b;
        jvm_route $cookie_JSESSIONID|sessionid reverse;
      }

    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.2.88;
       index index.html index.htm index.jsp;
       root  /var/www;

       #location ~ .*\.jsp$
       location  / aa/
      {
         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 /Nginxstatus {
         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;
      }
    }
    4.测试
    打开浏览器,输入:http://192.168.2.88/aa/
    刷新了N次还都是88,也就是补丁起作用了,cookie 值 也获得了,为了测试,我又打开了 “遨游浏览器”(因为session 和 cookie问题所以从新打开别的浏览器),输入网址:
    http://192.168.2.88/aa/
    显示89,刷新N次后还是89,大家测试的时候如果有疑问可一把 nginx 配置文件的
    srun_id=a  srun_id=b 去掉,然后在访问,就会知道 页面是轮询访问得了!!
  • 相关阅读:
    快速找到由程序员到CTO发展道路上的问路石
    从大师身上反思
    你真的了解企业虚拟化吗?
    “驱网核心技术丛书”创作团队访谈
    程序员到CTO需要准备什么
    深入搜索引擎的关键——索引
    程序员到CTO必须注意的几个关键点
    微软全球MVP教你如何规划程序人生
    “碟中碟”虚拟光驱软件开发者——万春 读《寒江独钓——Windows内核安全编程 》有感
    常用jar包之commonscollection使用
  • 原文地址:https://www.cnblogs.com/top5/p/1589874.html
Copyright © 2011-2022 走看看