Nginx反向代理实现Tomcat负载均衡
这篇短文主要介绍Tomcat的集群和用Nginx反向代理实现Tomcat负载均衡。
1、首先需要对一些知识点进行扫盲(对自己进行扫盲,囧):
- 集群(Cluster)
简单来说就是用N台服务器构成一个松耦合的多处理器系统(对外是一个服务器),内部通过网络实现通信。让N台服务器之间相互协作,共同承载一个网站的请求压力。用知乎上一个作者的话来说就是“同一个业务,部署在多个服务器上”,这就是集群。 集群中比较重要的是任务调度。 - 负载均衡(Load Balance)
简单来说就是根据某种负载策略把请求分发到集群中的每一台服务器上,让整个服务器群来处理网站的请求,从而共同完成工作任务。
2、安装环境如下:
- 腾讯云主机,安装的是
Centos7.3 64bits Nginx 1.7.4JDK8和Tomcat8
3、具体安装步骤:
JDK安装请参照 点我试试
Nginx安装请参照 点我试试
配置Nginx web反向代理, 实现两个Tomcat负载均衡:
--安装及配置Tomcat
tar -zxvf apache-tomcat-8.5.28.tar.gz
cp -rf apache-tomcat-8.5.28 /usr/local/tomcat1
mv apache-tomcat-8.5.28 /usr/local/tomcat2 --修改tomcat1端口号
$ cd /usr/local/tomcat1/conf/
$ cp server.xml server.xml.bak
$ cp web.xml web.xml.bak
$ vi server.xml
<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1" > ##修改Tomcat2端口号
$ cd /usr/local/tomcat2/conf/
$ cp server.xml server.xml.bak
$ cp web.xml web.xml.bak
$ vi server.xml
<Server port="8006" shutdown="SHUTDOWN">
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2" > --添加Tomcat1开机自动启动
--将/usr/local/tomcat1/bin/catalina.sh文件复制到/etc/init.d目录下并改名为tomcat1
# cp /usr/local/tomcat1/bin/catalina.sh /etc/init.d/tomcat1
--修改/etc/init.d/tomcat1文件,在文件中添加:
# vi /etc/init.d/tomcat1
--在第一行下面输入如下内容(否则出现错误:tomcat 服务不支持 chkconfig): #!/bin/sh
# chkconfig: 2345 10 90
# description:Tomcat1 service # Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
.....................................................................
# $Id: catalina.sh 1498485 2013-07-01 14:37:43Z markt $
# ----------------------------------------------------------------------------- CATALINA_HOME=/usr/local/tomcat1
JAVA_HOME=/usr/local/jdk8 # OS specific support. $var _must_ be set to either true or false. --添加tomcat服务:
# chkconfig --add tomcat1
--设置tomcat为开机自启动:
# chkconfig tomcat1 on
--将tomcat2设置开机自启动
--将/usr/local/tomcat2/bin/catalina.sh文件复制到/etc/init.d目录下并改名为tomcat2
# cp /usr/local/tomcat2/bin/catalina.sh /etc/init.d/tomcat2
--修改/etc/init.d/tomcat2文件,在文件中:
# vi /etc/init.d/tomcat2
--在第一行下面输入如下内容(否则出现错误:tomcat 服务不支持 chkconfig):
#!/bin/sh
# chkconfig: 2345 10 90
# description:Tomcat2 service # Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
.....................................................................
# ----------------------------------------------------------------------------- CATALINA_HOME=/usr/local/tomcat2
JAVA_HOME=/usr/local/jdk8 # OS specific support. $var _must_ be set to either true or false. --添加tomcat服务:
# chkconfig --add tomcat2
--设置tomcat为开机自启动:
# chkconfig tomcat2 on
到这里,tomcat已经安装好了,分别启用它们,打印出来引用的环境分别对应两个tomcat就是对的:
[root@VM_177_101_centos src]# service tomcat1 start
Using CATALINA_BASE: /usr/local/tomcat1
Using CATALINA_HOME: /usr/local/tomcat1
Using CATALINA_TMPDIR: /usr/local/tomcat1/temp
Using JRE_HOME: /usr/local/jdk8
Using CLASSPATH: /usr/local/tomcat1/bin/bootstrap.jar:/usr/local/tomcat1/bin/tomcat-juli.jar
Tomcat started.
[root@VM_177_101_centos src]# service tomcat2 start
Using CATALINA_BASE: /usr/local/tomcat2
Using CATALINA_HOME: /usr/local/tomcat2
Using CATALINA_TMPDIR: /usr/local/tomcat2/temp
Using JRE_HOME: /usr/local/jdk8
Using CLASSPATH: /usr/local/tomcat2/bin/bootstrap.jar:/usr/local/tomcat2/bin/tomcat-juli.jar
Tomcat started.
最后配置配置一下Nginx:
--切换到目录
cd /usr/local/nginx/conf
--修改配置文件
vi nginx.conf
--一些常用配置
--worker_processes:工作进程个数,可配置多个
--worker_connections:单个进程最大连接数
--server:每一个server相当于一个代理服务器
--lister:监听端口,默认80
--server_name:当前服务的域名,可以有多个,用空格分隔(我们是本地所以是localhost)
--location:表示匹配的路径,这时配置了/表示所有请求都被匹配到这里
--index:当没有指定主页时,默认会选择这个指定的文件,可多个,空格分隔
--proxy_pass:请求转向自定义的服务器列表
--upstream name{ }:服务器集群名称
--现在想通过nginx访问到tomcat,就需要修改配置中的server部分
server
{
listen 80 default;
charset utf-8;
server_name localhost;
access_log logs/host.access.log;
location / {
proxy_pass http://localhost:8080;
proxy_redirect default;
}
}
--到这里方向代理已经完成,这样所有的请求都需要经过代理服务器才能访问到正式服务器。
接下来实现负载均衡,在安装的过程中tomcat1配置的端口是8080,tomcat2配置的端口是8081。然后我们需要在配置文件中定义上游服务器(upstream server)
#服务器的集群
upstream testcomcat {
#weight是权重 权重越大,分配的几率越大
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=2;
}
server
{
listen 80 default;
charset utf-8;
access_log logs/host.access.log;
location / {
proxy_pass http://testcomcat;
proxy_redirect default;
}
}
--为了看到不一样,我将tomcat root下面的index.jsp页面稍微改动了一下,分别加入了TEST1,TEST2,方便区分,重启nginx,浏览器地址栏输入IP,进行访问,多刷新几次页面,会发现是在两个服务器间切换,如下图所示:
service nginx reload


Nginx反向代理实现Tomcat负载均衡的更多相关文章
- nginx 反向代理 和lvs负载均衡
nginx反向代理:用户请求nginx代理服务器然后代理服务器将用户请求转为服务器再由nginx代理服务器将服务器的响应反应给用户. lvs负载均衡:用户请求nginx代理服务器然后代理服务器将用户请 ...
- Nginx反向代理 实现Web负载均衡
实现负载均衡的方式有很多种,DNS.反向代理.LVS负载均衡器(软件实现).F5(负载均衡器,硬件,非常昂贵)这里我们只提到基于DNS,以及反向代理的方式来实现负载均衡Web服务 DNS服 ...
- Nginx反向代理及简单负载均衡配置
nginx配置文件主要分为六个区域:main section.events section.http section.sever section.location section.upstream s ...
- nginx作反向代理,实现负载均衡
nginx作反向代理,实现负载均衡按正常的方法安装好 ngixn,方法可参考http://www.cnblogs.com/lin3615/p/4376224.html其中作了反向代理的服务器的配置如下 ...
- Nginx 部署、反向代理配置、负载均衡
Nginx 部署.反向代理配置.负载均衡 最近我们的angular项目部署,我们采用的的是Nginx,下面对Nginx做一个简单的介绍. 为什么选择Nginx 轻:相比于Apache,同样的web服务 ...
- Nginx反向代理实现Tomcat+Jpress和halo
一.利用Nginx反向代理Jpress+Tomcat 1.环境准备 服务器 IP地址 作用 系统版本 Proxy代理服务器 10.0.0.101 负载均衡Nginx Web服务器 Ubuntu2004 ...
- Nginx学习笔记(三)--- Nginx实现反向代理和配置负载均衡
1.反向代理 2.Nginx反向代理流程图 3.安装多个tomcat 3.1把tomcat的压缩包传到Linux上 3.2 解压tomcat 3.3 给压缩好的tomcat改个名字用来区分一下 3.4 ...
- [nginx] - 使用nginx实现反向代理,动静分离,负载均衡,session共享
反向代理概念 先说正向代理,比如要访问youtube,但是不能直接访问,只能先找个FQ软件,通过FQ软件才能访问youtube. FQ软件就叫做正向代理.所谓的反向代理,指的是用户要访问youtube ...
- Nginx反向代理实现Tomcat多个应用80端口访问
应用背景 一般我们在开发时,一个工程里会有多个Web应用,比如一个前台一个后台,那我们就需要配置2个Tomcat服务器,比如一个是http://localhost:8080,一个是http://loc ...
随机推荐
- CU社区shell板块awk十三问整理
CU社区shell板块awk十三问整理 一.RS="" 当 RS="" 时,会将\n强制加入到FS变量中,因为RS为空时,是将连续多空行作为分隔符,近似于\n\ ...
- sqlserver数据库使用技巧(一)--限制数据库的大小
如何限制数据库的大小? 随着数据库的使用,他占用的空间会越来越大,为了便于资源的合理分配和管理,我们可以限制其最大的大小,这个建议只在测试环境使用 具体操作如下: 打开sqlserver数据库管理工具 ...
- [Bug] 解决 Sql Server 数据库死锁问题
SELECT request_session_id spid, OBJECT_NAME(resource_associated_entity_id) tableName FROM sys.dm_tra ...
- 浏览器通过file://访问文件和通过http://访问文件有什么区别
1.file协议用于访问本地计算机中的文件,就如同在Windows资源管理器中打开文件一样,注意它是针对本地(本机)的,简单来说,file协议是访问你本机的文件资源.http访问本地HTML,是在本地 ...
- Tomcat学习
一:项目默认部署路径: eclipse中,默认new一个server,项目默认会部署在:workspace\(工作空间)\.metadata\.plugins\org.eclipse.wst.serv ...
- Android Studio 3.1 Beta 1发布,如何及时下载更新
每次收到Android Studio更新提示,总是延迟一段时间才能下载的到或者更新成功.架梯子也不行.而且更新检测也是时断时续.Android Studio 3.0.1使用一段时间,多开几个工程.经常 ...
- MySQL系统临时表、用户临时表
MySQL临时表分为系统使用的临时表和用户使用的临时表. 系统使用的临时表是指MySQL在执行某些SQL语句时需要依赖临时表来完成整个过程.系统使用的临时表的情况可以分为以下几种: * group ...
- 【转】我读过最好的epoll讲解(来自知乎)
首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象.不管是文件,还是套接字,还是管道,我们都可以把他们看作流.之后我们来讨论I/O的操作,通过read,我 ...
- ionic2+Angular web端 实现微信分享以及如何跳转回分享出去的页面
微信分享,首先参考微信JS-SDK开发文档. step1:在启动文件index.html中引入微信js文件: <script src="http://res.wx.qq.com/ope ...
- ios开发常用RGB色值
iOS中RGB常用的色值,同时可将对颜色的设置定义成宏,方便开发应用,如: // RGB颜色转换(16进制->10进制) #define UIColorFromRGB(rgbValue) [UI ...