您的位置:首页 > 运维架构 > 反向代理

Windows系统下Nginx反向代理Tomcat集群

2018-02-06 16:33 561 查看

Windows系统下Nginx反向代理Tomcat集群

环境要求

jdk环境 (我使用的是1.8版本)

两台Tomcat以上服务器(我使用的是Tomcat7版本)

windows版Nginx压缩包(我使用的是1.8版本,Nginx下载地址

1.将两个Tomcat服务器放在同一目录下(最好使用同一版本),修改端口号,务必使两个服务器的所有端口(不只是修改8080端口,也需要修改server.xml中的其他端口)不一致。我的Tomcat1使用端口号为8090,Tomcat2使用的端口号为8000。



2.创建一个web项目,在WebContent中添加一个index.jsp文件。项目目录结构以及index.html中的内容如下所示,访问时输出当前会话的id。



<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>Tomcat</h3>
<hr>
<%= session.getId() %>
</body><
4000
/span>
</html>


3.将该项目分别放置在两个Tomcat服务器下面的webapps目录下面,并修改index.jsp中标题标签中的内容,位于Tomcat1下面的将其改为Tomcat1,位于Tomcat2下面的将其改为Tomcat2。启动两个Tomcat,并分别访问index界面,确保能正确显示。





4.上面部署完两台Tomcat服务器,接下来部署Nginx服务器。将下载的Nginx压缩包解压,得到如下目录,双击nginx.exe程序,可以在windows任务管理器中看到nginx.exe程序已经启动,浏览器输入localhost,可以得到welcome字样。



5.接下来来配置代理,在nginx压缩包中,找到conf——>nginx.conf文件,编辑nginx.conf文件,在大概第35行左右的位置,在server{}代码块上添加upstream server_wisdom{}server_wisdom是名字,自己可以随便起,然后在代码块中添加Tomcat服务器地址。然后在location代码块中添加代理,proxy_pass http://server_wisdom; 如下图我注释的地方,将注释去掉即可。

# upstream server_wisdom{
#    server 127.0.0.1:8090;
#    server 127.0.0.1:8000;
# }
server {
listen       80;
server_name  localhost;

location / {
root   html;
index  index.html index.htm;
# proxy_pass http://server_wisdom; }


6.在任务管理器中将nginx.exe进程结束掉,重新启动nginx,此时在浏览器中输入localhost/test,便会展示index.jsp中的内容,刷新浏览器,你会看到tomcat1和tomcat2一直变化,并且下面的sessionid也在变化。

7.当用户访问浏览器时,刷新浏览器后sessionid便发生变化,这就意味着访问的服务器在一直变化,这是绝对不允许的,如何解决多台Tomcat服务器session共享问题。有三种解决方案,一是修改tomcat的server.xml和项目中的web.xml两个配置文件二是将sessionid放入redis中三是在nginx的配置文件中,在upstream中添加ip_hash

介绍一下第一种方法,这种方法也叫使用tomcat的广播机制完成session共享。

将两台tomcat服务器中server.xml配置文件中的集群命令放开,大概在在109行,将其复制出来即可。然后修改项目中的web.xml配置文件,加入一个< distributable />标签即可。重启两台Tomcat服务器,启动nginx服务,浏览器输入localhost/test,刷新后sessionid不会变化。



由于大部分服务器都是部署在linux系统当中,所以在此不再详细描述在windows系统中具体如何实现。

下一篇博客将继续学习Centos7系统下Nginx反向代理Tomcat集群,并解决sessionid共享问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: