Tomcat+Nginx 负载均衡配置,Tomcat+Nginx集群,Tomcat集群
原文地址:http://fanshuyao.iteye.com/
在Win7实现Tomcat+Nginx 负载均衡配置
一、首先需要下载tomcat及nginx,然后解压。
nginx-1.11.2
apache-tomcat-7.0.70-windows-x64.zip
然后解压到某个文件夹里面。
tomcat 需要有2个或者2个以上,不然体现不了集群,所有把解压的Tomcat复制一份,重新命名。
我是这样的:
tom-7.0.70-1
tom-7.0.70-2
nginx-1.11.2
二、配置Tomcat
1、修改Tomcat端口
因为Tomcat使用了端口,如果相同的端口,后启动的tomcat会启动不了,提示端口占用。所以先修改端口。
由于开发也需要一个Tomcat,所以我把集群的2个Tomcat的端口都改了。
一个是:8081,对应tom-7.0.70-1
另一个是8082,对应tom-7.0.70-2
配置如下:
D:\tom-7.0.70-1\conf\server.xml
修改关闭端口
Xml代码
- <Server port="8015" shutdown="SHUTDOWN">
修改请求端口
Xml代码
- <Connector port="8081" protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="8443" />
D:\tom-7.0.70-2\conf\server.xml
Xml代码
- <Server port="8025" shutdown="SHUTDOWN">
Xml代码
- <Connector port="8082" protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="8443" />
2、修改 jvmRoute
同样是在文件
D:\tom-7.0.70-1\conf\server.xml
D:\tom-7.0.70-2\conf\server.xml
找到Engine
Xml代码
- <Engine name="Catalina" defaultHost="localhost" >
在后面加上 jvmRoute,如:
D:\tom-7.0.70-1\conf\server.xml配置下如
Xml代码
- <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
D:\tom-7.0.70-2\conf\server.xml配置如下
Xml代码
- <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">
三、修改nginx配置文件nginx.conf
1、找到nginx.conf文件,我的在D:\nginx-1.11.2\conf\nginx.conf
2、在http{……}里加上upstream,如下
Xml代码
- upstream tomcatCluster{# tomcatCluster和proxy_pass保持一样
- #解决session的问题
- ip_hash;#加上这个,解决Session每次访问页面都不一样,加上就一样了。
- #这里是tomcat的地址,weight越大,访问机率越大。
- server 127.0.0.1:8081 weight=1 fail_timeout=5s max_fails=1;
- server 127.0.0.1:8082 weight=2 fail_timeout=5s max_fails=1;
- }
server:配置tomcat服务器请求的地址,2台Tomcat服务就配置2个server
3、修改location / {……}
默认是这个的:
Xml代码
- location / {
- root html;
- index index.html index.htm;
- }
修改成这样:
Xml代码
- location / {
- #root html;
- proxy_pass http://tomcatCluster;
- #index index.html index.htm;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_connect_timeout 1;
- proxy_read_timeout 1;
- 10. proxy_send_timeout 1;
- 11. }
最简单的配置就是:
Xml代码
- location / {
- proxy_pass http://tomcatCluster;
- }
tomcatCluster 对应upstream后的命名。
下面的配置可以解决2个Tomcat服务器集群,当一台服务器挂掉(宕机)后,请求变得很慢的问题。
(Tomcat集群一台服务器挂掉后请求变慢解决方案)
Xml代码
- proxy_connect_timeout 1;
- proxy_read_timeout 1;
- proxy_send_timeout 1;
四、测试
1、在Tomcat部署一个JavaWeb项目,配置一个index.jsp页面,方便查看集群后请求进入的是哪个Tomcat服务器。其实这步可以省略,但有更加好。
index.jsp代码如下:
Html代码
- <%@ 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>学习项目</title>
- </head>
- <body>
- 10. <div style="color: red;font-weight: bold;">study项目。</div>
- 11. <%
- 12. //HttpSession session = request.getSession(true);
- 13. System.out.println(session.getId());
- 14. out.println("<br> SESSION ID:" + session.getId()+"<br>");
15. %>
- 16.
17. </body>
18. </html>
2、分别启动2个Tomcat
分别进行D:\tom-7.0.70-1\bin、D:\tom-7.0.70-2\bin目录,点击startup.bat启动Tomcat
3、启动Nginx服务器
使用Windows命令行启动
(1)进入D盘:d:
(2)进入D:\nginx-1.11.2目录:cd nginx-1.11.2
(3)启动服务:start nginx
关闭服务的命令:nginx -s stop
重新加载的命令:nginx -s reload,修改配置文件后,可以使用该命令直接加载,不需要重启。
4、在浏览器输入地址测试
Nginx监听的是80端口,浏览器直接输入:http://localhost/
如果出现Tomcat的页面,就证明成功。
由于我在Tomcat部署了项目,直接请求项目:http://localhost/study/
出现:
显示的信息是前面提过的index.jsp页面
其中后缀 jmv1,jvm2对应Tomcat配置的jvmRoute,这样可以清晰看出请求的是哪个Tomcat服务器。
另外说明的是:
Xml代码
- server 127.0.0.1:8081 weight=1 fail_timeout=5s max_fails=1;
里面的weight表示权重,权重越大,请求机率越大
127.0.0.1:8081设置为1,127.0.0.1:8082设置也为1,请求的机率几乎是请求完jvm1,再请求就是jvm2
127.0.0.1:8081设置为1,127.0.0.1:8082设置为2,请求的机率是请求2次8082才会请求一次8081
127.0.0.1:8081设置为1,127.0.0.1:8082设置为5,请求的机率是几乎所有请求都是8082
更多请自己测试吧。
原文地址:http://fanshuyao.iteye.com/