zoukankan      html  css  js  c++  java
  • 多机部署之session共享解决方案-copy

    1. 常见描述

    为了解决多机部署中的session共享问题( 场景: A服务器登录,请求负载打到B服务器会报未登录),拟采用nginx中的ip_hash,根据ip做负载,同一ip请求到同一服务器上,还有一个原因是因为页面用到多线程,也需要保持一个ip客户端请求到同一服务器端,但是因为是通过网关转发过来的,ip_hash获取到的客户端是网关的导致改方案失效。

    2. 解决方案

    2.1 测试接口

    真实测试可用,服务器端留了测试的接口,测试连接的是那台服务器。

     /**
     * 软件老王,测试
     **/
     @ResponseBody
     @GetMapping(value = "/laowang/test")
      public String tt(){
            String ip = null;
            try {
                ip = InetAddress.getLocalHost().getHostAddress();
            } catch (UnknownHostException e) {
                e.printStackTrace();
            }
            return "ip:"+ ip +",端口号:"+port;
        }
    

    2.2 nginx配置

    http {
        include       mime.types;
        default_type  application/octet-stream;
        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        #                  '$status $body_bytes_sent "$http_referer" '
        #                  '"$http_user_agent" "$http_x_forwarded_for"';
        #access_log  logs/access.log  main;
        sendfile        on;
        #tcp_nopush     on;
        #keepalive_timeout  0;
        keepalive_timeout  65;
        map $http_x_forwarded_for  $clientRealIp {
            ""      $remote_addr;
            ~^(?P<firstAddr>[0-9.]+),?.*$  $firstAddr;
        }
        upstream ruanjianlaowang {
              #ip_hash;
              hash $clientRealIp;
              server 10.192.168.10:9091;
              server 10.192.168.11:9092;
            }
        server {
           listen      9090;
           server_name  localhost;
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           location / {
                    proxy_pass http://ruanjianlaowang;
              }
           }
      }
    

    重点说明:

    (1)ngin负载均衡配置,监控9090端口

        server {
           listen      9090;
           server_name  localhost;
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           location / {
                    proxy_pass http://ruanjianlaowang;
              }
           }
    

    说明:原信息替换为:proxy_pass http://ruanjianlaowang;

    (2)两台服务器进行负载

        upstream ruanjianlaowang {
              #ip_hash;
              hash $clientRealIp;
              server 10.192.168.10:9091;
              server 10.192.168.11:9092;
            }
    

    说明:upstream ruanjianlaowang,其中ruanjianlaowang会在location中引用。

    (3)采用ip_hash负载方式

    因为要通过网关域名进行访问,所以要修改ip_hash,获取真实ip。

        map $http_x_forwarded_for  $clientRealIp {
            ""      $remote_addr;
            ~^(?P<firstAddr>[0-9.]+),?.*$  $firstAddr;
        }
        upstream ruanjianlaowang {
       		 #ip_hash;
        		hash $clientRealIp;
        }
    

    说明:http_x_forwarded_for是nginx自带的变量,里面包含原始代理原始ip,存放方式:ip1,ip2,ip3---,其中ip1为最原始,ip2为第一层代理,以此类推,map $http_x_forwarded_for $clientRealIp是将真实ip赋值给变量clientRealIp

  • 相关阅读:
    写的好的功能参考地址
    碰撞检测原理
    懒加载原理的实现
    jQuery图片延迟加载插件jQuery.lazyload 的使用
    电子工厂生产楼职位解析
    打印条码方式
    条码打印二
    条码打印三
    CSS实现圆角矩形
    条码打印四
  • 原文地址:https://www.cnblogs.com/hanease/p/14515264.html
Copyright © 2011-2022 走看看