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 ...
随机推荐
- viewpager 设置预加载项
live_pager.setOffscreenPageLimit(3); 防止viewpager 左右滑动 fragment消失
- 一行代码搭建 Python 静态服务器
如果电脑上安装有Python, 那么进入到目标文件夹,在终端中运行如下命令, 即可搭建映射当前目录的静态文件服务器: python -m SimpleHTTPServer 9000 默认端口号是800 ...
- VMware10不能安装64位(linux)系统,提示此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态
今天下载VM10准备安装Ubuntu14.04,一如既往的进行安装,突然发现出现了问题:此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态,具体如图: 如图中提示可重启电脑进入B ...
- SpringMVC解决跨域问题
有个朋友在写扇贝插件的时候遇到了跨域问题. 于是我对解决跨域问题的方式进行了一番探讨. 问题 API:查询单词 URL: https://api.shanbay.com/bdc/search/?wor ...
- 关于word图片显示不全
问题:在编辑word时,在其中一行插入一张图片,但是显示不全. 原因:给文字行距设置成 [ 固定值 ]的原因. 解决方案:先删除图片,在插入图片的一行右键--> 段落,弹出对话框,找到设置行距的 ...
- Sonar 常用代码规则整理(一)
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 摘要:公司部署了一套sonar,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分 ...
- PHP实现html字符实体转汉字
就一个函数搞定了: mb_convert_encoding("人人", "UTF-8", "HTML-ENTITIES"); 这个函数原本是 ...
- iOS-iOS调用相机调用相册【将图片保存到本地相册】
设置头部代理 <UINavigationControllerDelegate, UIImagePickerControllerDelegate> 1.调用相机 检测前置摄像头是否可用 - ...
- CentOS7安装MySQL的方法之通用二进制格式
CentOS7安装MySQL的方法之通用二进制格式
- boost编译随笔
boost下载地址 编译 生成bjam.exe 1.下载boost源码,可以直接使用上面给出的1.60.0版本 2.解压下载到的boost文件,例如解压到 x:\boost_1_60_0 3.使用Vi ...