nginx ip hash

问题:

项目的验证码一直不正确,怎么输入都错,后来从网上找了各种解决方法,有说 src="" 会执行两次加载事件的,后来通过火狐浏览器去调试确实发现有这个问题,代码如下:

不过这个问题还是解决不了,因为不知道用什么方法来阻止它执行两次,后来又研究了好久还是不行。


定位问题:

一位同事看完之后发现每次请求的 jessionid 不一样,这时候意识到是跟 jessionid 应该有些关系,后来直接通过 ip 去访问发现验证码验证正常,通过域名访问不行,到这个时候终于知道问题的原因了,那就是:域名解析到 tomcat 之后出现了问题:就是 nginx 这边把请求指向了2个不同的 tomcat,但是本身这个项目没有使用 session

共享的机制,于是就出现了上面的问题,验证码在 tomcat1中生成,但是验证却在 tomcat2中进行验证,这样自然每次的验证码都是有问题的。


解决问题:

既然问题是因为 session 共享的问题,那么问题就简单了,我们直接在 nginx 端使用 ip_hash 来解决session 共享的问题(实际上对 ip 进行 hash 之后我们就不需要session 共享了)保证了每个ip访问的 tomcat 都是同一个,这样验证自然就通过了;


你可能感兴趣的:(23_nginx)