Java工作笔记-Nginx配置IPHash(单点登录)

370 篇文章 20 订阅
4 篇文章 0 订阅

拓扑图是这样的

iphash实现原理:

记录ip地址,生成iphash值,用这个值去绑定一台服务器,以后这个client的请求都会访问到绑定到的服务器中,这里生成iphash一般是通过Nginx进行生成,然后绑定。

缺点,失去了负载均衡的意义,单点故障,当某个服务器宕机后,服务器上的iphash都会挂了。中小企业用得多,用户信息不敏感。

 

Nginx配置如下:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
	
	upstream ipHashDemo{
		
		ip_hash;
		server 127.0.0.1:8081;
		server 127.0.0.1:8082;
	}
	
	server{
	
		listen 8888;
		server_name 127.0.0.1;
		location / {
		
			proxy_pass http://ipHashDemo;
		}
	}
}

这里有一个要注意的,上个的server_name里面的prox_pass。

ipHashDemo要和upstream ipHashDemo相对应。

程序运行截图如下,登录用户和获取,都是在IPHashServer1中,这也是ipHashDemo:

关键源码如下:

IPHashServer1中

Server1Controller.java

package cn.it1995.ipHash.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;

@RestController
public class Server1Controller {

    @GetMapping("/login")
    public Object userLogin(@RequestParam("username") String username,
                            @RequestParam("password") String password,
                            HttpSession session){

        session.setAttribute("username", username);
        session.setAttribute("password", password);

        Map<String, Object> ret = new HashMap<>();
        ret.put("result", "登录成功");


        return ret;
    }

    @GetMapping("getUser")
    public Object getUser(HttpSession session){

        Object username = session.getAttribute("username");
        Object password = session.getAttribute("password");
        Map<String, Object> ret = new HashMap<>();
        ret.put("用户名", username);
        ret.put("密码", password);
        ret.put("当前服务器名称", "IPHashServer1");

        return ret;
    }
}

IPHashServer2中

Server2Controller.java

package cn.it1995.ipHash.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;

@RestController
public class Server2Controller {

    @GetMapping("/login")
    public Object userLogin(@RequestParam("username") String username,
                            @RequestParam("password") String password,
                            HttpSession session){

        session.setAttribute("username", username);
        session.setAttribute("password", password);

        Map<String, Object> ret = new HashMap<>();
        ret.put("result", "登录成功");


        return ret;
    }

    @GetMapping("getUser")
    public Object getUser(HttpSession session){

        Object username = session.getAttribute("username");
        Object password = session.getAttribute("password");
        Map<String, Object> ret = new HashMap<>();
        ret.put("用户名", username);
        ret.put("密码", password);
        ret.put("当前服务器名称", "IPHashServer2");

        return ret;
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT1995

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值