首页 > 编程知识 正文

nginx反向代理配置详解,nginx反向代理三种模式

时间:2023-05-03 16:50:26 阅读:31997 作者:2011

nginx实现负载平衡后,用户第一个请求的tomcat和第二个请求的tomcat几乎不同,但第一个请求中放入session的值只有一个tomcat1。 第二次请求的tomcat2中没有。 现在,用户可以继续登录了。 为了解决这个session共享问题,我们提出了以下建议。

文章目录nginx实现创建一个tomcat群集实现session的共享步骤实现web项目,大致描述session共享IP_hash(IP绑定)步骤实现的优缺点,并将tomcat复制到文件夹中, 导出war包,更改server.xml修改端口和工作路径,启动tomcat,并测试是否可以成功关闭nginx配置文件的优缺点

用nginx实现会话共享IP_hash(IP绑定)

原理:每个请求都是为访问ip的每个哈希结果分配的。 这样,每个访问者可以通过固定访问一个后端服务器来解决session问题。

直接在实现概要说明配置文件中添加ip_hash即可实现ip绑定。 ip绑定与哪个浏览器无关,而是与本机计算机的ip的关系。 在nginx配置ip绑定之后,如果a客户端请求8080服务器,则A B的两个客户端将处理回8080服务器中的所有a请求;对于ip绑定,如果是高并发,则a客户端没有任何效果

upstream backserver {ip_hash; 服务器192.168.0.14:88; server 192.168.0.15:80; (优缺点http://www.Sina.com)实现也相对简单,需要修改nginx配置文件时为http://www.Sina.com) :

很多人逐网访问时,没有负载均衡这个词。 这很多ip都一样,去访问同一个tomcat。 如果此人访问的tomcat突然锁定,则nginx故障切换机制将分发给另一台tomcat服务器,所有请求此tomcat的用户都必须重新登录。 这个人正在使用,突然使用的网络不稳定,这个人换到另一个网络,这样ip变了,这个人又重新登录。优点:这样的解决方案很容易实现,但不能满足业务需求。 tomcat集群实现session共享缺点:该方法原理比较简单,有几个tomcat可以复制几个session,如一个tomcat的session

分步实现web项目小结

% @ page language=' Java ' import=' Java.util.* ' pageencoding=' utf-8 ' % % string path=request.getcontextpath ss ) request.getservername ) ) : ) request.getserverport ) )路径%! 文档类型html公共'-//W3C//dtd html 4.01 transitional//en ' htmlheadbasehref=' %=basepath % ' title my JSP ' index.titlemetahttp-equiv=' pragma ' content=' no-cache ' r=' cache ' meter uiv=' keywords ' content=' keyword 1,keyword2, 密钥3 ' meta http-equiv=' description ' content=' this is my page '-link rel=' style sheet ' type=' text/CSS ' href

t;%=request.getServerName()%> <BR> SessionPort:<%=request.getServerPort()%> <% out.println("This is Tomcat Server 111"); %> </body> </html>

记得修改一下输出语句,进行不同tomcat的区分
写入之后,在web.xml中添加一个<distributable/>节点,放在display下面

复制一份tomcat到文件夹中

(文件夹用于储存tomcat)

两个tomcat内容都是一样的,只不过文件夹命名不一样

导出war包

放到tomcat的的webapps中

导出两次,第二次的时候,把输出语句换成2222,以便于观察,把第二次导出的war包放入到tomcat2中,第一次的就是放在tomcat1中。

修改server.xml

打开tomcat的conf文件夹,对server.xml文件修改
找到<Engine name="Catalina" defaultHost="localhost">这一条语句,在此语句后输入:

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8"> <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/> <Channel className="org.apache.catalina.tribes.group.GroupChannel"> <Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="4000" autoBind="100" selectorTimeout="5000" maxThreads="6"/> <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/> </Sender> <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> </Channel> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/> <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false"/> <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> </Cluster> 修改端口及工作路径

修改端口
打开tomcat的conf文件夹,对server.xml文件修改,修改成不一样的即可,我为了简便,修改为如下:

tomcat1



tomcat2



修改工作路径
打开tomcat的坚定的机器猫文件夹,对startup.bat文件修改
在@echo off前面加上:

set TLTLE="tomcat002"set CATALINA_BASE="D:tomcat_clustertomcat002"set CATALINA_HOME="D:tomcat_clustertomcat002"

记得两个tomcat都要修改

启动tomcat

两个都要启动(忽略乱码问题)

修改nginx配置文件

修改conf路径下的nginx.conf文件

第一个参数为为自己的tomcat地址weight:权重fail_timeout:失败时间max_fails:失败次数

fail_timeout与max_fails可以理解为,在fail_timeout的时间内,失败max_fails次,那就把请求分配给其他服务器

测试是否成功

在浏览器输入自己的url以及端口测试

测试成功:是两个不同的tomcat,但是是一样的session,session共享成功

关闭nginx


再次进入已经显示进不去了,证明nginx关闭了

优缺点

优点:实现简单,没有什么花里胡哨的操作。如果集群中的tomcat的个数不多,而且用户没有那么多的时候可以选择这种方式。
缺点:只要Session数据有变化,就需要将数据同步到所有其他机器上,机器越多,同步带来的网络带宽开销就越大;当用户很多时,每台机器用于保存Session数据的内容占用会很严重。

redis实现session的共享

暂未学习,学习之后再加入。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。