1、启动两个tomcat,端口分别为8080,8081
2、配置nginx,vim /usr/local/nginx/conf/nginx.conf
添加如下配置:
3、启动nginx或热加载
启动:
cd /usr/local/nginx/sbin
./nginx
热加载
./nginx -s reload
4、在tomcat中部署一个项目,写个servlet如下
import java.io.IOException; import java.util.Random; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class HelloWorldServlet extends HttpServlet{ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session= request.getSession(); int port2=request.getLocalPort(); if(session.getAttribute("userid")==null){ String userid= String.valueOf(new Random().nextInt(100)) ; session.setAttribute("userid", userid); response.getWriter().append("Hello, "+userid+",this is "+port2+ " port"); }else{ String userid=(String)session.getAttribute("userid"); response.getWriter().append("Welcome back, "+userid+", this is "+port2+" port") ; } } }
配置web.xml
<servlet> <servlet-name>HelloWorldServlet</servlet-name> <servlet-class>com.atguigu.servlet.HelloWorldServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorldServlet</servlet-name> <url-pattern>/test</url-pattern> </servlet-mapping>
5、访问测试,浏览器地址栏输入:
nginx所在电脑ip/项目名/test
此时,默认是轮询算法,每次访问的tomcat不一样导致,无法维护session会话。
6、解决办法:用redis存储session,实现session共享
6.1把jar包拷到tomcatlib包下
commons-pool2-2.0.jar
jedis-2.5.2
tomcat-redis-session-manager1.2.jar
6.2通知tomcat,不要管理session了,交给redis管理,需要修改tomcat配置文件,注意修改前先关闭tomcat
启动redis redis-server /redis配置文件
编辑context.xml,在context节点加入:
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" /> <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager" host="redis电脑ip" port="redis端口号" database="0" maxInactiveInterval="60" />
7、在刷新浏览器,即使就会保持会话了,检查redis中也存了数据。