脚本宝典收集整理的这篇文章主要介绍了【Azkaban】分布式下防止IP变化导致频繁登录的优化和原理,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
Azkaban的 session 会根据IP地址判断,如果session的IP发生变化,则会遇到session错误。
如果session正确,而ip不正确,则会如下错误:
{
"error": "session"
}
如果正常写业务逻辑,可能要重新登录。那么分布式场景下,多台服务器请求一台Azkaban-Web-server, 会导致什么?如果没有正确缓存session,则会导致反复重复登录。
直接原因,这里发现IP和Session里面的IP不一致,则返回null。
//azkaban.webapp.servlet.LoginAbstractAzkabanServlet#getSessionFromRequest
private Session getSessionFromSessionId(String sessionId, String remoteIp) {
if (sessionId == null) {
return null;
}
Session session = getApplication().getSessionCache().getSession(sessionId);
// Check if the IP's are equal. If not, we invalidate the sesson.
if (session == null || !remoteIp.equals(session.getIp())) {
return null;
}
return session;
}
在上层逻辑中:
//azkaban.webapp.servlet.LoginAbstractAzkabanServlet#doGet
if (session != null) {
//session正常
} else {
if (hasParam(req, "ajax")) {
HashMap<String, String> retVal = new HashMap<String, String>();
retVal.put("error", "session");
this.writeJSON(resp, retVal);
} else {
handleLogin(req, resp);
}
}
X-Forwarded-For
伪装成反向代理,填入固定的IP。proxy_set_header X-Real-IP $remote_addr; # 隐藏客户端时修改为 固定IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 隐藏客户端修改 固定IP
以上是脚本宝典为你收集整理的【Azkaban】分布式下防止IP变化导致频繁登录的优化和原理全部内容,希望文章能够帮你解决【Azkaban】分布式下防止IP变化导致频繁登录的优化和原理所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。